2011-09-14 48 views
0

重用XSLT模板格式的XML元素

<catalog> 
    <s1> 
    <cd> 
     <title>TRACK A</title> 
     <artist>ARTIST A</artist> 
    </cd> 
    </s1> 
    <s2> 
    <cd> 
     <title>TRACK B</title> 
     <artist>TRACK B</artist> 
    </cd> 
    </s2> 
    <s3> 
    <cd> 
     <title>TRACK C</title> 
     <artist>ARTIST C</artist> 
    </cd> 
    <cd> 
     <title>TRACK D</title> 
     <artist>ARTIST D</artist> 
    </cd> 
    </s3> 
</catalog> 

我試圖建立模板格式的元素S1和S3相同的XML文件,但S2格式元素不同。

的XSLT我是

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 

    <xsl:for-each select="catalog/s1"> 
    <xsl:call-template name="style1"/> 
    </xsl:for-each> 

    <xsl:for-each select="catalog/s2"> 
    <xsl:call-template name="style2"/>  
    </xsl:for-each> 

    <xsl:for-each select="catalog/s3"> 
    <xsl:call-template name="style1"/> 
    </xsl:for-each> 

</xsl:template> 

<xsl:template match="cd" name="style1"> 
    <b><xsl:value-of select="title" /></b> 
    <b><xsl:value-of select="artist" /></b> 
</xsl:template> 

<xsl:template match="cd" name="style2"> 
    <i><xsl:value-of select="title" /></i> 
</xsl:template> 

</xsl:stylesheet> 

但它不產生任何輸出。我認爲我需要,但無論如何,似乎都稱之爲'風格1'。

爲什麼不生產產量?

謝謝

瑞安

回答

2

PUT 「CD/」 在你的SELECT語句:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 

    <xsl:for-each select="catalog/s1"> 
    <xsl:call-template name="style1"/> 
    </xsl:for-each> 

    <xsl:for-each select="catalog/s2"> 
    <xsl:call-template name="style2"/>  
    </xsl:for-each> 

    <xsl:for-each select="catalog/s3"> 
    <xsl:call-template name="style1"/> 
    </xsl:for-each> 

</xsl:template> 

<xsl:template match="cd" name="style1"> 
    <b><xsl:value-of select="cd/title" /></b> 
    <b><xsl:value-of select="cd/artist" /></b> 
</xsl:template> 

<xsl:template match="cd" name="style2"> 
    <i><xsl:value-of select="cd/title" /></i> 
</xsl:template> 

</xsl:stylesheet> 
+0

衛生署。非常感謝。我將cd添加到for-each中的select語句中,這似乎更有意義,因爲我的模板旨在格式化'cd' – Ryan

+0

不用客氣。 XSLT語法規則在您熟悉它們之前不是很明顯。如果它解決了您的問題,您可能還想接受我的答案。 –

+0

正在等待超時,以允許接受:) – Ryan