Поддерживает ли JAXP XSLT 2.0?

  1. Мой ${java.home} - это C:\Program Files\Java\jdk1.7.0_51.
  2. Я распаковал saxonHE9-6-0-6J.zip в C:\Program Files\Java\jdk1.7.0_51\jre\lib\ext
  3. и добавьте saxonhe9.jar в мою переменную classpath.
  4. Затем я создал файл 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.

Другие вопросы по тегам