使用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缩进它。