2016-03-04 108 views
0

我是XSLT的新手。我正嘗試從XSLT生成文本文件。當我使用XALAN分析器對輸入XML運行XSLT時,文本文件生成時沒有輸出。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文件只輸出生成的:

這些都是一些城市。

請幫助我理解這裏出了什麼問題。

回答

0

Xalan只支持XSLT 1.0。由於version="2.0"它使用寬鬆的規則進行語法檢查,並簡單地忽略<xsl:sequence>元素。因此,您的變量cities爲空。

對於這個樣式表,您需要使用像Saxon這樣的XSLT 2.0引擎。

+0

或者簡單地將版本標籤更改爲1.0,並相應地命名空間。我沒有看到任何特定於xslt2的指令 –

+1

@ AydinK.'xsl:sequence'和'xsl:value-of @ separator'和'xsl:variable @ as' – wero

+0

這似乎不正確的向前兼容的行爲。當運行2.0樣式表的1.0處理器看到未知屬性(如@as)時,它應該忽略它,但是當它試圖執行未知元素(如xsl:sequence)時,它應該會引發錯誤。好吧,我想這不會被修復。 –

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> 

附:南卡羅來納州和弗吉尼亞州的州,而不是城市

+0

大家好..非常感謝您的意見。我已經使用撒克遜,這已經奏效。我明白,版本是問題! –