gpt4 book ai didi

XML 和 XSLT : need it to sort only certain child nodes

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

我需要让我的 XSLT 样式表对我的 XML 文件的子节点进行排序,但仅限于某些子节点。下面是 XML 的示例:

<?xml version="1.0"?>
<xmltop>
<child1 num="1">
<data>12345</data>
</child1>

<child1 num="2">
<data>12345</data>
</child1>

<child2 num="3">
<data>12345</data>
</child2>

<child2 num="2">
<data>12345</data>
</child2>

<child2 num="1">
<data>12345</data>
</child2>
</xmltop>

这是我正在使用的 XSL 文件:

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

<xsl:template match="/xmltop">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="@num"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="child2">
<xsl:copy-of select="."/>
</xsl:template>

</xsl:stylesheet>

这给我带来了问题,因为节点被剥离了它们的标签,但它们的内容仍然存在,使我的 XML 无效。我不是真正的 XSL 专家,所以如果这是一个愚蠢的问题,请原谅我。

<child2>的排序正确。

谢谢。

最佳答案

没有定义输出应该是什么,所以这只是我在“猜测模式”:

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

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

<xsl:template match="xmltop">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="(name() = 'child2')*@num"
data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<xmltop>
<child1 num="1">
<data>12345</data>
</child1>
<child1 num="2">
<data>12345</data>
</child1>
<child2 num="3">
<data>12345</data>
</child2>
<child2 num="2">
<data>12345</data>
</child2>
<child2 num="1">
<data>12345</data>
</child2>
</xmltop>

产生了(我认为的)想要的结果:

<xmltop>
<child1 num="1">
<data>12345</data>
</child1>
<child1 num="2">
<data>12345</data>
</child1>
<child2 num="1">
<data>12345</data>
</child2>
<child2 num="2">
<data>12345</data>
</child2>
<child2 num="3">
<data>12345</data>
</child2>
</xmltop>

关于XML 和 XSLT : need it to sort only certain child nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2878809/

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