JAXP是否支持XSLT 2.0

时间:2015-07-27 09:45:36

标签: xml xslt-2.0 jaxp

  1. 我的$ {java.home}是C:\ Program Files \ Java \ jdk1.7.0_51。
  2. 我在C:\ Program中提取了saxonHE9-6-0-6J.zip 文件\爪哇\ jdk1.7.0_51 \ JRE \ lib中\分机
  3. 并将saxonhe9.jar添加到我的classpath变量中。
  4. 然后我在C:\ Program下创建了一个jaxp.properties文件 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

  5. 为了进行测试,我在样式表中使用了以下几行

    <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 个答案:

答案 0 :(得分:1)

JAXP是一个接口,而不是一个实现;它包含模式处理和XPath处理以及XSLT处理。

JAXP转换接口有多种实现,包括JDK中的内置XSLT处理器,Apache的Xalan-J产品中的两个Xalan版本,Oracle XSLT处理器和Saxon。其中唯一支持XSLT 2.0的是Saxon。

答案 1 :(得分:1)

我认为你只想要<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>