Поддерживает ли JAXP XSLT 2.0?
- Мой ${java.home} - это C:\Program Files\Java\jdk1.7.0_51.
- Я распаковал saxonHE9-6-0-6J.zip в C:\Program Files\Java\jdk1.7.0_51\jre\lib\ext
- и добавьте saxonhe9.jar в мою переменную classpath.
Затем я создал файл jaxp.properties в C: \ Program Files \ Java \ jdk1.7.0_51 \ jre \ lib и добавил следующие строки:
javax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl javax.xml.xpath.XPathFactory "," net.sf.saxon.xpath.XPathFactoryImpl
Для тестирования я использую в моей таблице стилей следующие строки
<xsl:for-each select="//*[@type='Usage']/@name">
<xsl:value-of select="." separator="', '"/>
</xsl:for-each>
Но вывод
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
это строка без запятых.
2 ответа
Я думаю ты просто хочешь <xsl:value-of select="//*[@type='Usage']/@name" separator=", "/>
вместо
<xsl:for-each select="//*[@type='Usage']/@name">
<xsl:value-of select="." separator="', '"/>
</xsl:for-each>
поскольку последний, очевидно, никогда не будет выводить разделитель, учитывая, что у вас есть value-of
внутри for-each
это гарантирует, что .
это один элемент для value-of
,
Онлайн пример на http://xsltransform.net/6qVRKx4 выходах name 1, name 3
для входного образца
<root>
<foo type="Usage" name="name 1"/>
<foo type="Nonsense" name="name 2"/>
<foo type="Usage" name="name 3"/>
</root>
JAXP - это интерфейс, а не реализация; и он охватывает обработку схемы и обработку XPath, а также обработку XSLT.
Существует несколько реализаций интерфейса преобразования JAXP, включая встроенный в JDK процессор XSLT, две версии Xalan, входящие в продукт Xalan-J от Apache, процессор Oracle XSLT и Saxon. Из них единственным, который поддерживает XSLT 2.0, является Saxon.