我试图根据给定xml的值对XML进行排序。在这个xml中,我需要基于educational_details {DR,PDR,MSC,BSC}的排序。我有用。请看下面的样品。
输入XML :-
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<document>
<studentname>ACM</studentname>
<educational_details>MSC</educational_details>
</document>
<document>
<studentname>ACB</studentname>
<educational_details>BSc</educational_details>
</document>
<document>
<studentname>ACP</studentname>
<educational_details>PDR</educational_details>
</document>
<document>
<studentname>ACC</studentname>
<educational_details>DR</educational_details>
</document>
</Person>我已经试过了如下所示。
XSL:-
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="pOrder" select="'DR,PDR,MSC,BSc'" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort
select="string-length(
substring-before(
concat(',',$pOrder,','),
concat(',',name(),',')))" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>输出输出
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<document>
<studentname>ACM</studentname>
<educational_details>MSC</educational_details>
</document>
<document>
<studentname>ACB</studentname>
<educational_details>BSc</educational_details>
</document>
<document>
<studentname>ACP</studentname>
<educational_details>PDR</educational_details>
</document>
<document>
<studentname>ACC</studentname>
<educational_details>DR</educational_details>
</document>
</Person>预期输出:-
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<document>
<studentname>ACC</studentname>
<educational_details>DR</educational_details>
</document>
<document>
<studentname>ACP</studentname>
<educational_details>PDR</educational_details>
</document>
<document>
<studentname>ACM</studentname>
<educational_details>MSC</educational_details>
</document>
<document>
<studentname>ACB</studentname>
<educational_details>BSc</educational_details>
</document>
</Person>发布于 2014-05-30 09:40:04
我觉得你想要一样的东西
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="pOrder" select="'DR,PDR,MSC,BSc'" />
<xsl:variable name="vSequence" select="tokenize($pOrder, ',')"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="document">
<xsl:sort
select="index-of($vSequence, educational_details)" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>变换
<?xml version="1.0" encoding="UTF-8"?>
<root>
<document>
<studentname>ACM</studentname>
<educational_details>MSC</educational_details>
</document>
<document>
<studentname>ACB</studentname>
<educational_details>BSc</educational_details>
</document>
<document>
<studentname>ACP</studentname>
<educational_details>PDR</educational_details>
</document>
<document>
<studentname>ACC</studentname>
<educational_details>DR</educational_details>
</document>
</root>转到
<?xml version="1.0" encoding="UTF-8"?><root><document>
<studentname>ACC</studentname>
<educational_details>DR</educational_details>
</document><document>
<studentname>ACP</studentname>
<educational_details>PDR</educational_details>
</document><document>
<studentname>ACM</studentname>
<educational_details>MSC</educational_details>
</document><document>
<studentname>ACB</studentname>
<educational_details>BSc</educational_details>
</document></root>https://stackoverflow.com/questions/23951070
复制相似问题