XSLT输出不显示

时间:2016-03-04 13:23:21

标签: xml xslt xalan

我是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:&#xA;&#xA;</xsl:text>
    <xsl:value-of select="$cities" separator="&#xA;" />
</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文件:

  

这些是一些城市。

请帮助我理解这里有什么问题。

2 个答案:

答案 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:&#xA;&#xA;</xsl:text>
    <xsl:for-each select="addressbook/address/city" >
        <xsl:value-of select="."/>
        <xsl:text>&#xA;</xsl:text>
    </xsl:for-each>
    <xsl:text>Virginia</xsl:text>
</xsl:template>

</xsl:stylesheet>

P.S。南卡罗来纳州和弗吉尼亚州是,而不是城市