使用XSLT的XML元素顺序

时间:2010-10-25 11:24:15

标签: xslt

假设我有一个像这样的xml文档

XML文件:

<document>
  <educationalsection>
  educational details
  </educationalsection>

  <professionalsection>
  professional section details
  </professionalsection>
</document>

我创建了XSL以将其收敛到我所需的格式但问题是如果我想更改部分的顺序我该怎么做?例如,如果我希望专业部门在不改变xml的情况下获得教育,那怎么可能呢?我需要添加到现有的xsl或xml中,以便当我的Web应用程序发送xml进行转换时,它可以具有Web应用程序指定的不同元素顺序。

2 个答案:

答案 0 :(得分:2)

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="pOrder" select="'professionalsection,educationalsection'"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*">
                <xsl:sort select="string-length(
                                     substring-before(
                                        concat(',',$pOrder,','),
                                        concat(',',name(),',')))"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

输出:

<document>
    <professionalsection>
     professional section details
    </professionalsection>
    <educationalsection>
     educational details
    </educationalsection>
</document>

答案 1 :(得分:1)

xsl:apply-templatesxsl:for-each元素可以包含xsl:sort个子元素,可用于对所选的子节点进行排序。您可以随时使用不同的排序顺序。

您还可以使用mode上的xsl:template属性,使用不同的排序顺序选择不同的模板。