程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了XSLT 复制和排序多个节点大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决XSLT 复制和排序多个节点?

开发过程中遇到XSLT 复制和排序多个节点的问题如何解决?下面主要结合日常开发的经验,给出你关于XSLT 复制和排序多个节点的解决方法建议,希望对你解决XSLT 复制和排序多个节点有所启发或帮助;

我想对以下 XML 进行排序:

  1. 元素通过 元素的值
  2. 元素的值

XML

 <test>
    <person>
        <name>Tom</name>
        <codes>
            <code>BS</code>
            <code>BA</code>
            <code>BM</code>
        </codes>
    </person>
    <person>
        <name>Dick</name>
    </person>
    <person>
        <name>Harry</name>
        <codes>
            <code>AB</code>
            <code>FG</code>
            <code>C</code>
        </codes>
    </person>
</test>

XSLT

使用以下 XSLT,我能够实现结果 1,但结果 2 无法实现:

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

    <xsl:output method="xml" enCoding="utf-8" indent="yes" version="1.0" />

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

    <xsl:template match="test">

        <xsl:copy>
            <xsl:apply-templates SELEct="@*" />
            <xsl:apply-templates SELEct="person">
                <xsl:sort SELEct="name" />
            </xsl:apply-templates>
        </xsl:copy>

    </xsl:template>
</xsl:stylesheet>

电流输出

当前输出为

<test>
    <person>
        <name>Dick</name>
    </person>
    <person>
        <name>Harry</name>
        <codes>
            <code>AB</code>
            <code>FG</code>
            <code>C</code>
        </codes>
    </person>
    <person>
        <name>Tom</name>
        <codes>
            <code>BS</code>
            <code>BA</code>
            <code>BM</code>
        </codes>
    </person>
</test>

期望输出

这是朝着正确方向迈出的一步,但我需要:

  <test>
        <person>
            <name>Dick</name>
        </person>
        <person>
            <name>Harry</name>
            <codes>
                <code>AB</code>
                <code>C</code>
                <code>FG</code>
            </codes>
        </person>
        <person>
            <name>Tom</name>
            <codes>               
                <code>BA</code>
                <code>BM</code>
                <code>BS</code>
            </codes>
        </person>
    </test>

我尝试了几种方法,但都不起作用。

解决方法

怎么样:

XSLT 1.0

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

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

<xsl:template match="/test">
    <xsl:copy>
        <xsl:apply-templates SELEct="person">
            <xsl:sort SELEct="name" />
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

<xsl:template match="codes">
    <xsl:copy>
        <xsl:apply-templates SELEct="code">
            <xsl:sort/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

大佬总结

以上是大佬教程为你收集整理的XSLT 复制和排序多个节点全部内容,希望文章能够帮你解决XSLT 复制和排序多个节点所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:XSLT