gpt4 book ai didi

xslt排序输出xml

转载 作者:行者123 更新时间:2023-12-04 15:35:09 25 4
gpt4 key购买 nike

我正在尝试找到以下问题的解决方案。

我正在开发 XSLT 转换(现在大约有 40KB 大),它将非常复杂的 XML 转换为非常简单的结构,如下所示:

<Records>
<Record key="XX">
</Record>
<Record key="XX1">
</Record>
<Record key="XX2">
</Record>
<Record key="XX3">
</Record>
</Records>

我希望根据 Records/Record/@key 值对输出的 XML 进行排序。问题是我的 XSLT 生成了未排序的输出,并且由于其复杂性,我无法在那里对其进行排序。是否可以在输出 XML 上应用 xsl:sort?我知道我可以准备另一个 XSLT 转换,但在我的情况下这不是解决方案,因为我仅限于一个 XSLT。请帮助!...

最佳答案

Is it possible to apply xsl:sort on the output XML?

是的,多遍处理可能的,尤其是在 XSLT 2.0 中,您甚至不需要应用 xxx:node-set() 结果的扩展名,因为臭名昭著的 RTF 类型不再存在:

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

<xsl:template match="/">
<xsl:variable name="vPass1">
<!--
Put/Invoke your cirrent code here
to generate the following
-->
<Records>
<Record key="XX3">
</Record>
<Record key="XX2">
</Record>
<Record key="XX4">
</Record>
<Record key="XX1">
</Record>
</Records>
</xsl:variable>

<xsl:apply-templates select="$vPass1/*"/>
</xsl:template>

<xsl:template match="Records">
<Records>
<xsl:perform-sort select="*">
<xsl:sort select="@key"/>
</xsl:perform-sort>
</Records>
</xsl:template>
</xsl:stylesheet>

当对任何 XML 文档(未使用/忽略)执行此转换时,会生成所需的、正确的、排序的结果:

<Records>
<Record key="XX1"/>
<Record key="XX2"/>
<Record key="XX3"/>
<Record key="XX4"/>
</Records>

在 XSLT 1.0 中,将结果从 RTF 类型额外转换为普通树几乎相同:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
exclude-result-prefixes="ext">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/">
<xsl:variable name="vrtfPass1">
<!--
Put/Invoke your cirrent code here
to generate the following
-->
<Records>
<Record key="XX3">
</Record>
<Record key="XX2">
</Record>
<Record key="XX4">
</Record>
<Record key="XX1">
</Record>
</Records>
</xsl:variable>

<xsl:variable name="vPass1"
select="ext:node-set($vrtfPass1)"/>

<xsl:apply-templates select="$vPass1/*"/>
</xsl:template>

<xsl:template match="Records">
<Records>
<xsl:for-each select="*">
<xsl:sort select="@key"/>

<xsl:copy-of select="."/>
</xsl:for-each>
</Records>
</xsl:template>
</xsl:stylesheet>

关于xslt排序输出xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630259/

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