首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用<xsl:sort>问题根据节点值对XML进行排序

使用<xsl:sort>问题根据节点值对XML进行排序
EN

Stack Overflow用户
提问于 2014-05-30 09:20:22
回答 1查看 125关注 0票数 0

我试图根据给定xml的值对XML进行排序。在这个xml中,我需要基于educational_details {DR,PDR,MSC,BSC}的排序。我有用。请看下面的样品。

输入XML :-

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
     <Person>
       <document>
         <studentname>ACM</studentname>
         <educational_details>MSC</educational_details>
       </document>
       <document>
         <studentname>ACB</studentname>
         <educational_details>BSc</educational_details>
       </document>
       <document>
         <studentname>ACP</studentname>
         <educational_details>PDR</educational_details>
       </document>
       <document>
         <studentname>ACC</studentname>
         <educational_details>DR</educational_details>
       </document>
     </Person>

我已经试过了如下所示。

XSL:-

代码语言:javascript
复制
 <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:param name="pOrder" select="'DR,PDR,MSC,BSc'" />
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*">
                    <xsl:sort
                        select="string-length(
                                         substring-before(
                                            concat(',',$pOrder,','),
                                            concat(',',name(),',')))" />
                </xsl:apply-templates>
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>

输出输出

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
     <Person>
       <document>
         <studentname>ACM</studentname>
         <educational_details>MSC</educational_details>
       </document>
       <document>
         <studentname>ACB</studentname>
         <educational_details>BSc</educational_details>
       </document>
       <document>
         <studentname>ACP</studentname>
         <educational_details>PDR</educational_details>
       </document>
       <document>
         <studentname>ACC</studentname>
         <educational_details>DR</educational_details>
       </document>
     </Person>

预期输出:-

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
     <Person>
       <document>
         <studentname>ACC</studentname>
         <educational_details>DR</educational_details>
       </document>
       <document>
         <studentname>ACP</studentname>
         <educational_details>PDR</educational_details>
       </document>
       <document>
         <studentname>ACM</studentname>
         <educational_details>MSC</educational_details>
       </document>
       <document>
         <studentname>ACB</studentname>
         <educational_details>BSc</educational_details>
       </document>
     </Person>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-30 09:40:04

我觉得你想要一样的东西

代码语言:javascript
复制
<xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:param name="pOrder" select="'DR,PDR,MSC,BSc'" />

        <xsl:variable name="vSequence" select="tokenize($pOrder, ',')"/>

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

        <xsl:template match="root">
            <xsl:copy>
                <xsl:apply-templates select="document">
                    <xsl:sort
                        select="index-of($vSequence, educational_details)" />
                </xsl:apply-templates>
            </xsl:copy>
        </xsl:template>

    </xsl:stylesheet>

变换

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<root>
       <document>
         <studentname>ACM</studentname>
         <educational_details>MSC</educational_details>
       </document>
       <document>
         <studentname>ACB</studentname>
         <educational_details>BSc</educational_details>
       </document>
       <document>
         <studentname>ACP</studentname>
         <educational_details>PDR</educational_details>
       </document>
       <document>
         <studentname>ACC</studentname>
         <educational_details>DR</educational_details>
       </document>
</root>

转到

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?><root><document>
         <studentname>ACC</studentname>
         <educational_details>DR</educational_details>
       </document><document>
         <studentname>ACP</studentname>
         <educational_details>PDR</educational_details>
       </document><document>
         <studentname>ACM</studentname>
         <educational_details>MSC</educational_details>
       </document><document>
         <studentname>ACB</studentname>
         <educational_details>BSc</educational_details>
       </document></root>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23951070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档