微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么xsl:sort选择器不起作用?

如何解决为什么xsl:sort选择器不起作用?

| 给定以下XML:
<?xml version=\"1.0\"?>
<Things>
  <Thing>
    <Thing ID=\"0002\"/>
    <Name>Bob</Name>
  </Thing>
  <Thing>
    <Thing ID=\"0003\"/>
    <Name>Alice</Name>
  </Thing>
  <Thing>
    <Thing ID=\"0001\"/>
    <Name>Carol</Name>
  </Thing>
</Things>
我想输出按ID属性排序的相同XML。以下样式表可以满足我的要求。注释掉的
xsl:sort
(以及我尝试过的几种变体)不起作用-我只是得到原始文档的未分类副本。 (并且没有错误消息。) 如何特别选择Thing元素上的ID属性(以避免在较大文档中可能存在的其他元素上使用ID属性)?
<xsl:stylesheet
    xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"
    version=\"1.0\">

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

 <xsl:template match=\"Things\">
   <xsl:copy>
     <xsl:apply-templates>
       <xsl:sort select=\"*/@ID\" data-type=\"number\"/>

       <!-- I don\'t understand why this doesn\'t work:

         <xsl:sort select=\"Thing/Thing[@ID]\" data-type=\"number\"/>
       -->
     </xsl:apply-templates>
   </xsl:copy>
 </xsl:template>

</xsl:stylesheet>
    

解决方法

你要
    <xsl:sort select=\"Thing/@ID\" data-type=\"number\"/>
在发生这种情况的时刻,上下文已经在每个第一级
Thing
处,因此排序键是第二级Thing的@ID属性。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。