gpt4 book ai didi

xml - 在 XSLT 2.0 中对元素进行排序

转载 作者:数据小太阳 更新时间:2023-10-29 02:26:11 25 4
gpt4 key购买 nike

我正在尝试使用 XSLT 对以下 XML 进行排序

<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>

预期的输出是

<Name>name1</Name>
<Job>x</Job>
<Name>name2</Name>
<Job>y</Job>
<Name>name3</Name>

必须对 Name 元素进行排序,同时保持 Job 元素的完整性。我正在使用 XSLT 2.0

尽管我能够使用 xsl:sort 对 Name 元素进行正确排序,如 tutorial 中给出的那样,我得到的输出如下:

<Name>name1</Name>
<Name>name2</Name>
<Name>name3</Name>
<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>

我是 XSLT 的新手。抱歉,如果这是一个非常简单的问题。提前致谢。

最佳答案

Sorry, if this is a very simple question.

不,这一点都不简单。以这种方式尝试:

XSLT 2.0

<xsl:stylesheet version="2.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="*"/>

<xsl:variable name="sorted-names">
<xsl:perform-sort select="/root/Name">
<xsl:sort select="."/>
</xsl:perform-sort>
</xsl:variable>

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

<xsl:template match="Name">
<xsl:copy-of select="$sorted-names/Name[count(current()/preceding-sibling::Name) + 1]"/>
</xsl:template>

</xsl:stylesheet>

请注意,这假设一个格式正确的 XML 输入,具有单个根元素。

演示:http://xsltransform.net/94hvTzG/1

关于xml - 在 XSLT 2.0 中对元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30394163/

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