所以我对XSL有疑问:
我有一堆元素,包含一个子元素,可以通过某个更新重命名和移动。我正在努力处理这种转变。以下示例将提供更好的主意。
之前:
<DGS>
<DG>
<FallbackGroup>
<name>name</name>
<timeout>20</timeout>
</FallbackGroup>
<CallRouting>
<route>route</route>
</CallRouting>
</DG>
</DGS>
后:
<DGS>
<DG>
<CallRouting>
<route>route</route>
</CallRouting>
<FallbackGroup>
<name>name</name>
<timeout>20</timeout>
</FallbackGroup>
</DG>
</DGS>
我必须为这些单独的<DG>
元素执行此操作。我在这里看了很多类似的问题,但他们的解决方案都没有做我想让他们做的事情。所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
要更改<DG>
元素的子元素的顺序,您可以将身份模板与以下内容结合使用:
<!-- identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- reorders the DG element -->
<xsl:template match="DG">
<xsl:copy> <!-- copies DG element -->
<xsl:copy-of select="CallRouting" /> <!-- copies CallRouting element -->
<xsl:copy-of select="FallbackGroup" /> <!-- copies FallbackGroup element -->
</xsl:copy>
</xsl:template>
输出为:
<DGS>
<DG>
<CallRouting>
<route>route</route>
</CallRouting>
<FallbackGroup>
<name>name</name>
<timeout>20</timeout>
</FallbackGroup>
</DG>
</DGS>
答案 1 :(得分:0)
如果您的源DG
元素具有超过2个子元素并且您想要
将FallbackGroup
移到最后,然后尝试更一般的解决方案。
DG
的模板应该从复制所有子项开始
除 FallbackGroup
。FallbackGroup
。所以整个脚本可能如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="DG">
<xsl:copy>
<xsl:copy-of select="* except FallbackGroup"/>
<xsl:copy-of select="FallbackGroup"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy><xsl:apply-templates select="node()|@*" /></xsl:copy>
</xsl:template>
</xsl:stylesheet>