对XML文件的节点进行排序

1 sorting xslt

我是XSLT的新手,虽然到目前为止我已成功完成了许多任务......但排序让我很难过.

我需要一个小例子的帮助,这样我才能理解xsl:sort更好.

我的xml数据如下所示:

<NewTerms>
  <newTerm>Zebra</newTerm>
  <newTerm>Horse</newTerm>
  <newTerm>Cat</newTerm>
  <newTerm>Lion</newTerm>
  <newTerm>Jaguar</newTerm>
  <newTerm>Cheetah</newTerm>
  <newTerm>Deer</newTerm>
  <newTerm>Buffalo</newTerm>
  <newTerm>Dog</newTerm>
</NewTerms>
Run Code Online (Sandbox Code Playgroud)

我只想简单地从xsl表中按字母顺序对它们进行排序.我写的xsl(&不工作)如下:

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

  <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>

  <xsl:template match="NewTerms">

      <xsl:apply-templates>
        <xsl:sort select="newTerm"/>
      </xsl:apply-templates>

  </xsl:template>  

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

我很确定我还没有理解xsl:sort函数是怎么回事.如果你帮助我完成这个小例子......我想我会更好地理解它.

谢谢.

茉莉

Pet*_*ter 5

我假设你想要一个有效的XML结构作为输出,因为你<xsl:output>的方法是"XML".你可以试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
version="1.0">

<xsl:output method="xml" indent="yes" omit-xml-declaration="no" />
<xsl:strip-space elements="*"/>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()">
            <xsl:sort select="."/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

这给出了这个输出:

<?xml version="1.0" encoding="UTF-8"?>
<NewTerms>
<newTerm>Buffalo</newTerm>
<newTerm>Cat</newTerm>
<newTerm>Cheetah</newTerm>
<newTerm>Deer</newTerm>
<newTerm>Dog</newTerm>
<newTerm>Horse</newTerm>
<newTerm>Jaguar</newTerm>
<newTerm>Lion</newTerm>
<newTerm>Zebra</newTerm>
</NewTerms>
Run Code Online (Sandbox Code Playgroud)

这对你有帮助吗?

您还可以查看排序的定义,例如:http: //www.w3schools.com/xsl/el_sort.asp http://www.w3.org/TR/xslt#sorting

最好的问候,彼得