我是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>
非常感谢您的帮助。
答案 0 :(得分: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>