gpt4 book ai didi

xml - 元素的 XSLT 切换顺序

转载 作者:行者123 更新时间:2023-12-05 04:13:52 25 4
gpt4 key购买 nike

我需要切换元素,例如就像在这个 xml 中一样:

<configuration>
<sites>
<site name="site1"/>
<site name="site2" />
<site name="site3"/>
<site name="site4"/>
</sites>
</configuration>

到:

<configuration>
<sites>
<site name="site3"/>
<site name="site4" />
<site name="site1"/>
<site name="site2"/>
</sites>
</configuration>

通过 XSLT。任何人都可以帮助进行这种转变吗?

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

<xsl:variable name="site1" select="configuration/sites/site[@name='site1']" />

<xsl:variable name="site2" select="configuration/sites/site[@name='site2']" />

<xsl:template match="site[@name='site1'"/>
<xsl:template match="site[@name='site2'"/>


<xsl:template match="configuration/sitecore/sites">
<xsl:apply-templates select="node()|@*"/>
<xsl:value-of select="$site1"/>
<xsl:value-of select="$site2"/>
</xsl:template>

我尝试做的是,我不确定我是否可以使用一些变量来存储所有特定元素内容到它删除适当的元素副本节点的其余部分并将其附加在末尾。

谢谢

Krp0

最佳答案

如果 site 元素的所需顺序无法通过 xsl:sort 所需的成对排序关系指定,也许您正在寻找重新排列预先确定的集合sites 完全基于预先确定的顺序,仅通过它们的 @name 属性区分:

XSLT 1.0

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

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

<xsl:template match="sites">
<xsl:copy>
<xsl:apply-templates select="site[@name='site3']"/>
<xsl:apply-templates select="site[@name='site4']"/>
<xsl:apply-templates select="site[@name='site1']"/>
<xsl:apply-templates select="site[@name='site2']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

我已经通过身份转换展示了这一点以获得最大的灵 active ,但是您可以通过 xsl:copy-of 而不是 xsl:apply-templates 等来降低通用性.


XSLT 2.0

在 XSLT 2.0 中,可以使用单个 xsl:apply-templates:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

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

<xsl:template match="sites">
<xsl:copy>
<xsl:apply-templates select="site[@name='site3'],
site[@name='site4'],
site[@name='site1'],
site[@name='site2']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

信用:感谢@Martin Honnen对于这个很好的建议。

关于xml - 元素的 XSLT 切换顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450150/

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