如何使用xslt保留xml元素的数据位置

时间:2011-06-25 06:39:35

标签: xml xslt-2.0

我们正在改变一些像xml:

<collection>
    <availableLocation>NY</availableLocation>
    <cd>
        Fight for your mind
    </cd>
    <cd>
        Electric Ladyland
    </cd>
    <availableLocation>NJ</availableLocation>
</collection>

使用以下xslt

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
    <html>
        <body>

                 <xsl:apply-templates select="collection/availableLocation"/>
                <xsl:apply-templates select="collection/cd"/>

        </body>
    </html>
</xsl:template>
<xsl:template match="availableLocation">
    <h3>
        <xsl:value-of select="."/>
    </h3>
</xsl:template>
<xsl:template match="cd">
    <xsl:value-of select="."/><br/>
</xsl:template>


</xsl:stylesheet>

,输出为:

NY

NJ

Fight for your mind 
Electric Ladyland 

我们希望保留xml中的顺序。我们想要输出如下:

NY

Fight for your mind 
Electric Ladyland 

NJ

有没有办法做到这一点?请注意/建议。

我通过做这些改变找到了解决方案

            <xsl:for-each select="collection">

                <xsl:apply-templates select="."/>

                </xsl:for-each>

    </body>

请告诉我们是否有更好的解决方案。

提前致谢

2 个答案:

答案 0 :(得分:2)

<xsl:apply-templates select="collection/availableLocation|collection/cd"/>

答案 1 :(得分:1)

最简单的解决方案之一甚至不需要明确的 <xsl:apply-templates>

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="text()">
  <xsl:value-of select="normalize-space()"/>
  <xsl:text>&#xA;</xsl:text>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<collection>
    <availableLocation>NY</availableLocation>
    <cd>
      Fight for your mind
    </cd>
    <cd>
      Electric Ladyland
    </cd>
    <availableLocation>NJ</availableLocation>
</collection>

产生了想要的正确结果

NY
Fight for your mind
Electric Ladyland
NJ