Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用xslt按值对xml元素排序_Xml_Sorting_Xslt_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

如何使用xslt按值对xml元素排序

如何使用xslt按值对xml元素排序,xml,sorting,xslt,xslt-1.0,xslt-2.0,Xml,Sorting,Xslt,Xslt 1.0,Xslt 2.0,我下面有一个xml <parent> <child1>False</child1> <child2>True</child2> <child3>False</child3> <child4>True</child4> </parent> <parent> <child4>False</child1> <child5>True&l

我下面有一个xml

<parent>
<child1>False</child1>
<child2>True</child2>
<child3>False</child3>
<child4>True</child4>
</parent>

<parent>
<child4>False</child1>
<child5>True</child2>
<child3>False</child3>
<child4>False</child4>
</parent>

假的
真的
假的
真的
假的
真的
假的
假的
按True排序后,xml和最终的xml应该如下所示

<parent>
<child4>True</child4>
<child2>True</child2>
<child1>False</child1>
<child3>False</child3>
</parent>
<parent>
<child5>True</child2>
<child4>False</child1>
<child3>False</child3>
<child4>False</child4>
</parent>

真的
真的
假的
假的
真的
假的
假的
假的

这可以用xslt来完成。我需要xslt逻辑来按True对xml元素进行排序。

xsl:sort
是您需要的

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes" />

<xsl:template match="parent">
  <parent>
    <xsl:for-each select="*">
      <xsl:sort select="." order="descending"/>
      <xsl:copy-of select='.'/>
    </xsl:for-each>
  </parent>
</xsl:template>

</xsl:stylesheet>


仅添加一点,子元素可能也有属性。您到底在哪里遇到了这些问题?是XSLT 1还是XSLT 2?您已经包含了这两个标记。除了将“True”元素放在第一位之外,您还关心顺序吗?例如,在您的第一个父元素中,您是否关心child4是在child2之前,还是可以接受其他方式?当我在post@storia321“不工作”是什么意思?在这里工作:@storia321是否将父元素包装到外部元素中?因为它在您发布的示例上不起作用,因为它不是有效的xml(只能有一个顶级元素)。