我是XSLT的新手。我试图从XSLT生成一个文本文件。当我使用 XALAN 解析器对输入XML运行XSLT时,文本文件生成时没有输出。
这是 XSLT
<xsl:stylesheet version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" />
<xsl:template match="/">
<xsl:variable name="cities" as="xs:string*">
<xsl:sequence select="addressbook/address/city" />
<xsl:sequence select="'Virginia'" />
</xsl:variable>
<xsl:text>These are some of the cities:

</xsl:text>
<xsl:value-of select="$cities" separator="
" />
</xsl:template>
这是 XML
<?xml version="1.0" ?>
<addressbook>
<address>
<name>Peter Thompson</name>
<stree>3456 South Blvd.</stree>
<city>Chicago</city>
<state>IL</state>
<zip-code>34678</zip-code>
</address>
<address>
<name>Jason Thompson</name>
<stree>3456 Fort Main</stree>
<city>South Carolina</city>
<state>NC</state>
<zip-code>67878</zip-code>
</address>
我尝试以这种方式编译它:
java -classpath ~/Downloads/xalan/xalan.jar org.apache.xalan.xslt.Process -in cities.xml -xsl cities.xsl -out citiesop.txt
仅使用输出生成cities.txt
文件:
这些是一些城市。
请帮助我理解这里有什么问题。
答案 0 :(得分:0)
Xalan仅支持XSLT 1.0。由于version="2.0"
,它使用宽松的语法检查规则,只是忽略<xsl:sequence>
元素。因此,您的变量cities
为空。
对于此样式表,您需要使用XSLT 2.0引擎,如Saxon。
答案 1 :(得分:0)
只需在XSLT 1.0中重写它:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" />
<xsl:template match="/">
<xsl:text>These are some of the cities:

</xsl:text>
<xsl:for-each select="addressbook/address/city" >
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
<xsl:text>Virginia</xsl:text>
</xsl:template>
</xsl:stylesheet>
P.S。南卡罗来纳州和弗吉尼亚州是州,而不是城市。