首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >XSL执行不处理属性的排序?

XSL执行不处理属性的排序?
EN

Stack Overflow用户
提问于 2017-10-17 12:00:28
回答 1查看 351关注 0票数 1

在下面的MWE中,我有一个属性序列,我对其进行排序,然后输出XML和属性。当我输出整个XML时,它看起来是排序的:

代码语言:javascript
代码运行次数:0
运行
复制
<data attr="attrA">testA</data><data attr="attrZ">testZ</data> 
<data attr="attrZ">testZ</data><data attr="attrA">testA</data>

但是,如果接下来打印属性,则不会得到排序的输出(升序==降序):

代码语言:javascript
代码运行次数:0
运行
复制
attrZ attrA
attrZ attrA

这是怎么可能的?我怎么能得到:

代码语言:javascript
代码运行次数:0
运行
复制
attrA attrZ 
attrZ attrA

??

代码语言:javascript
代码运行次数:0
运行
复制
<xsl:stylesheet version="2.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:xs="http://www.w3.org/2001/XMLSchema">    
     <xsl:variable name="dataUnsorted" as="element()*">
            <data attr="attrZ">testZ</data>
            <data attr="attrA">testA</data>
     </xsl:variable>

     <xsl:variable name="dataAscending" as="element()*">
      <xsl:perform-sort select="$dataUnsorted">
        <xsl:sort select="@attr" order="ascending"/> 
      </xsl:perform-sort>
    </xsl:variable>

     <xsl:variable name="dataDescending" as="element()*">
      <xsl:perform-sort select="$dataUnsorted">
        <xsl:sort select="@attr" order="descending"/> 
      </xsl:perform-sort>
    </xsl:variable>  

     <xsl:template match="/">
          <xsl:message>
          <xsl:copy-of select="$dataAscending"/>
      </xsl:message> 
      <xsl:message>
           <xsl:copy-of select="$dataDescending"/>
      </xsl:message> 
      <xsl:message>
          <xsl:value-of select="$dataAscending/@attr"/>
      </xsl:message> 
      <xsl:message>
           <xsl:value-of select="$dataDescending/@attr"/>
      </xsl:message> 
      </xsl:template>    
</xsl:stylesheet>
EN

回答 1

Stack Overflow用户

发布于 2017-10-17 12:38:07

/@attr中的步骤$dataAscending/@attr选择属性节点并按文档顺序对它们进行排序,这就是如何定义步骤选择节点(https://www.w3.org/TR/xpath-31/#id-path-operator)。

如果您想要保留顺序,您有三个选项:

  1. 使用for in return表达式:for $e in $dataAscending return $e/@attr
  2. 排序和存储属性序列,而不是元素序列
  3. 仅限于XPath/XSLT 3+:使用!$dataAscending!@attr
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46789642

复制
相关文章

相似问题

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