使用XSLT按多个属性对特定XML文件进行排序

使用XSLT按多个属性对特定XML文件进行排序,xml,sorting,xslt,Xml,Sorting,Xslt,下面是XML结构。我必须先按类别名称排序,然后按首选项名称排序,然后对值列表本身进行排序。我是xslt新手。如何实现多重订购 正文 正文 B C A. 正文 IP_许可证 ITAR_许可证 排除许可证 如何通过浏览器应用xslt。如何在XML中引用xslt 编辑: 我现在尝试了如下的方法。第一个问题是输出中缺少一些属性,如描述。我想我不太理解应用模板。 第二个问题是这些值没有排序。类别名称和首选项名称已排序 您没有非常清楚地解释您的需求:例如,没有提示您要生成什么输出(是HTML吗?)。如果

下面是XML结构。我必须先按类别名称排序,然后按首选项名称排序,然后对值列表本身进行排序。我是xslt新手。如何实现多重订购


正文
正文
B
C
A.
正文
IP_许可证
ITAR_许可证
排除许可证
如何通过浏览器应用xslt。如何在XML中引用xslt

编辑: 我现在尝试了如下的方法。第一个问题是输出中缺少一些属性,如描述。我想我不太理解应用模板。 第二个问题是这些值没有排序。类别名称和首选项名称已排序


您没有非常清楚地解释您的需求:例如,没有提示您要生成什么输出(是HTML吗?)。如果要在类别内对首选项进行排序,可以执行以下操作

<xsl:template match="category">
  <xsl:apply-templates select="preference">
    <xsl:sort select="@name"/>
  </xsl:apply-templates>
</xsl:template>

同样,对于其他要排序的内容,请尝试以下方法:

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

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

<xsl:template match="/preferences">
     <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="category">
            <xsl:sort select="@name"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

<xsl:template match="category">
    <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="preference">
            <xsl:sort select="@name"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

<xsl:template match="context">
    <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="value">
            <xsl:sort select="."/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>


我需要XML输出。我基本上想对两个大的XML文件进行排序,然后比较和合并它们。如何配置它以保留XML标记?我感觉您还没有真正掌握基本知识。当你还处在第一级的时候,问一些这样的问题不是很有成效,因为你可能不理解答案。找一本好书,完成介绍章节中的练习,遇到困难时回到这里。描述≠ 描述