1

我是新手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> 

所以输出应该是:

  <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>

我看过一些帖子并在 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>

非常感谢您的帮助。

4

1 回答 1

0

xsl:for-each在您的示例中无需使用。尝试这个:

<?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>
于 2013-05-22T19:05:34.480 回答