XML 和 XSLT:需要它仅对某些子节点进行排序 [英] XML and XSLT: need it to sort only certain child nodes

查看:30
本文介绍了XML 和 XSLT:需要它仅对某些子节点进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要让我的 XSLT 样式表对我的 XML 文件的子节点进行排序,但只对某些子节点进行排序.下面是 XML 的示例:

I need to have my XSLT stylesheet sort my XML file's child nodes, but only certain ones. Here's an example of what the XML is like:

<?xml version="1.0"?>
<xmltop>
<child1 num="1">
<data>12345</data>
</child1>

<child1 num="2">
<data>12345</data>
</child1>

<child2 num="3">
<data>12345</data>
</child2>

<child2 num="2">
<data>12345</data>
</child2>

<child2 num="1">
<data>12345</data>
</child2>
</xmltop>

这是我使用的 XSL 文件:

And this is the XSL file I'm using:

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

<xsl:template match="/xmltop">
 <xsl:copy>
  <xsl:apply-templates>
   <xsl:sort select="@num"/>
  </xsl:apply-templates>
 </xsl:copy>
</xsl:template>
<xsl:template match="child2">
 <xsl:copy-of select="."/>
</xsl:template>

</xsl:stylesheet>

这给我带来了问题,因为节点被剥离了它们的标签,它们的内容仍然存在,使我的 XML 无效.我并不是真正的 XSL 专家,所以如果这是一个愚蠢的问题,请原谅我.

This creates problems for me because the nodes are stripped of their tags, and their contents remain, making my XML invalid. I'm not really an expert at XSL so pardon me if this is a dumb question.

的排序正确.

谢谢.

推荐答案

没有定义输出应该是什么,所以这只是我在猜测模式":

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

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

 <xsl:template match="xmltop">
  <xsl:copy>
    <xsl:apply-templates>
      <xsl:sort select="(name() = 'child2')*@num"
       data-type="number"/>
    </xsl:apply-templates>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<xmltop>
    <child1 num="1">
        <data>12345</data>
    </child1>
    <child1 num="2">
        <data>12345</data>
    </child1>
    <child2 num="3">
        <data>12345</data>
    </child2>
    <child2 num="2">
        <data>12345</data>
    </child2>
    <child2 num="1">
        <data>12345</data>
    </child2>
</xmltop>

产生了(我认为的)想要的结果:

<xmltop>
   <child1 num="1">
      <data>12345</data>
   </child1>
   <child1 num="2">
      <data>12345</data>
   </child1>
   <child2 num="1">
      <data>12345</data>
   </child2>
   <child2 num="2">
      <data>12345</data>
   </child2>
   <child2 num="3">
      <data>12345</data>
   </child2>
</xmltop>

这篇关于XML 和 XSLT:需要它仅对某些子节点进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆