Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 - Fatal编程技术网

使用XSLT进行XML排序

使用XSLT进行XML排序,xml,sorting,xslt,Xml,Sorting,Xslt,我不熟悉xslt,想在xml下面按节点排序 <HAZARDS> <HAZARD> <ID>00000000000000000001</ID> <TEXT>Interior</TEXT> <TYPE>I</TYPE> <ACTIVE/> <COMMENTS> <COMMENT> <ID&

我不熟悉
xslt
,想在
xml
下面按节点排序

  <HAZARDS>
  <HAZARD>
    <ID>00000000000000000001</ID>
    <TEXT>Interior</TEXT>
    <TYPE>I</TYPE>
    <ACTIVE/>
    <COMMENTS>
      <COMMENT>
        <ID>00000000000000000011</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </COMMENT>
    </COMMENTS>
    <REMEDIES>
      <REMEDY>
        <ID>00000000000000000012</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </REMEDY>
    </REMEDIES>
  </HAZARD>
  <HAZARD>
    <ID>00000000000000000002</ID>
    <TEXT>Exterior</TEXT>
    <TYPE>E</TYPE>
    <ACTIVE/>
    <COMMENTS>
      <COMMENT>
        <ID>00000000000000000021</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </COMMENT>
    </COMMENTS>
    <REMEDIES>
      <REMEDY>
        <ID>00000000000000000022</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </REMEDY>
    </REMEDIES>
  </HAZARD>
</HAZARDS> 

00000000000000000001
内部
我
00000000000000000011
其他
1.
00000000000000000012
其他
1.
00000000000000000002
外部
E
00000000000000000021
其他
1.
00000000000000000022
其他
1.
因此,输出应为:

  <HAZARDS>     
   <HAZARD>
      <ID>00000000000000000002</ID>
      <TEXT>Exterior</TEXT>
      <TYPE>E</TYPE>
      <ACTIVE/>
      <COMMENTS>
        <COMMENT>
          <ID>00000000000000000021</ID>
          <VALUE>Other</VALUE>
          <ACTIVE>1</ACTIVE>
        </COMMENT>
      </COMMENTS>
      <REMEDIES>
        <REMEDY>
          <ID>00000000000000000022</ID>
          <VALUE>Other</VALUE>
          <ACTIVE>1</ACTIVE>
        </REMEDY>
      </REMEDIES>
    </HAZARD>
    <HAZARD>
      <ID>00000000000000000001</ID>
      <TEXT>Interior</TEXT>
      <TYPE>I</TYPE>
      <ACTIVE/>
      <COMMENTS>
        <COMMENT>
          <ID>00000000000000000011</ID>
          <VALUE>Other</VALUE>
          <ACTIVE>1</ACTIVE>
        </COMMENT>
      </COMMENTS>
      <REMEDIES>
        <REMEDY>
          <ID>00000000000000000012</ID>
          <VALUE>Other</VALUE>
          <ACTIVE>1</ACTIVE>
        </REMEDY>
      </REMEDIES>
    </HAZARD>
    </HAZARDS>

00000000000000000002
外部
E
00000000000000000021
其他
1.
00000000000000000022
其他
1.
00000000000000000001
内部
我
00000000000000000011
其他
1.
00000000000000000012
其他
1.
我已经看到了一些帖子,并在xslt下面创建了它们,但它似乎不起作用

 <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="HARARDS">
        <xsl:for-each select="//HAZARD">
            <xsl:sort select="TEXT"/>
        </xsl:for-each>
    </xsl:template>
    <xsl:template match="HAZARDS"/>
    <xsl:template match="node()|@*">
        <xsl:copy>
            Heading ------- 
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

标题------

非常感谢你的帮助

在您的示例中,没有必要为每个使用
xsl:for。
试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="HAZARDS">
        <xsl:copy>
            <xsl:apply-templates select="//HAZARD">
                <xsl:sort select="TEXT"/>
            </xsl:apply-templates>
        </xsl:copy> 
    </xsl:template>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

将生成以下输出:

<HAZARDS>
  <HAZARD>
    <ID>00000000000000000002</ID>
    <TEXT>Exterior</TEXT>
    <TYPE>E</TYPE>
    <ACTIVE/>
    <COMMENTS>
      <COMMENT>
        <ID>00000000000000000021</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </COMMENT>
    </COMMENTS>
    <REMEDIES>
      <REMEDY>
        <ID>00000000000000000022</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </REMEDY>
    </REMEDIES>
  </HAZARD>
  <HAZARD>
    <ID>00000000000000000001</ID>
    <TEXT>Interior</TEXT>
    <TYPE>I</TYPE>
    <ACTIVE/>
    <COMMENTS>
      <COMMENT>
        <ID>00000000000000000011</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </COMMENT>
    </COMMENTS>
    <REMEDIES>
      <REMEDY>
        <ID>00000000000000000012</ID>
        <VALUE>Other</VALUE>
        <ACTIVE>1</ACTIVE>
      </REMEDY>
    </REMEDIES>
  </HAZARD>
</HAZARDS>

00000000000000000002
外部
E
00000000000000000021
其他
1.
00000000000000000022
其他
1.
00000000000000000001
内部
我
00000000000000000011
其他
1.
00000000000000000012
其他
1.
使用以下格式设置XML格式:。然后可以使用control-K缩进它。