然后我在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
为了进行测试,我在样式表中使用了以下几行
<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);
是一个带逗号的字符串。
答案 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>