gpt4 book ai didi

XSLT:属性排序

转载 作者:行者123 更新时间:2023-11-30 23:47:23 27 4
gpt4 key购买 nike

我需要一个小例子的帮助,以便我可以理解xsl:sort更好的。

我的 XML 数据如下所示:

<NewTerms>
<newTerm ID="3">Zebra</newTerm>
<newTerm ID="11">Horse</newTerm>
<newTerm ID="1">Cat</newTerm>
<newTerm ID="90">Lion</newTerm>
<newTerm ID="62">Jaguar</newTerm>
<newTerm ID="30">Cheetah</newTerm>
<newTerm ID="55">Deer</newTerm>
<newTerm ID="45">Buffalo</newTerm>
<newTerm ID="15">Dog</newTerm>
</NewTerms ID="10">

我想根据 ID 对它们进行排序属性。我拥有的 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="@*|node()[not(preceding::node()=.)]">
<xsl:copy>
<xsl:apply-templates select="@*|node()[not(preceding::node()=.)]">
<xsl:sort select="./@ID"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

我不知道如何 xsl:sort功能有效。帮助我通过这个例子来更好地理解它。

最佳答案

您的转换是 正确 .您只是错过了指定 data-type属性默认为“文本”,因此不适用于数字。

有关使用 xsl:sort 的更多信息您可以看到 specs和最近的类似 question .

这里有一些注意事项:

  • 您可以省略 ./@ID因为 .选择模板中默认的上下文节点
  • 您不需要以这种方式检查前面的节点,这是没有意义的。

  • 通知您只需要 Identity Transformation带有排序指令。

    您的最终转换将如下所示:
    <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:strip-space elements="*"/>

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

    </xsl:stylesheet>

    当应用于输入时(这里稍微修改以修复您的结束标签错字):
    <NewTerms>   
    <newTerm ID="3">Zebra</newTerm>
    <newTerm ID="11">Horse</newTerm>
    <newTerm ID="1">Cat</newTerm>
    <newTerm ID="90">Lion</newTerm>
    <newTerm ID="62">Jaguar</newTerm>
    <newTerm ID="30">Cheetah</newTerm>
    <newTerm ID="55">Deer</newTerm>
    <newTerm ID="45">Buffalo</newTerm>
    <newTerm ID="15">Dog</newTerm>
    </NewTerms>

    产生:
    <NewTerms>
    <newTerm ID="1">Cat</newTerm>
    <newTerm ID="3">Zebra</newTerm>
    <newTerm ID="11">Horse</newTerm>
    <newTerm ID="15">Dog</newTerm>
    <newTerm ID="30">Cheetah</newTerm>
    <newTerm ID="45">Buffalo</newTerm>
    <newTerm ID="55">Deer</newTerm>
    <newTerm ID="62">Jaguar</newTerm>
    <newTerm ID="90">Lion</newTerm>
    </NewTerms>

    关于XSLT:属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509077/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com