在 XSLT 2.0 中对元素进行排序
Sorting elements in XSLT 2.0
我正在尝试使用 XSLT
对以下 XML 进行排序
<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>
预期输出是
<Name>name1</Name>
<Job>x</Job>
<Name>name2</Name>
<Job>y</Job>
<Name>name3</Name>
必须对 Name 元素进行排序,同时保持 Job 元素的完整性。
我正在使用 XSLT 2.0
尽管我能够使用 tutorial 中给出的 xsl:sort 正确排序 Name 元素,但我得到的输出如下:
<Name>name1</Name>
<Name>name2</Name>
<Name>name3</Name>
<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>
我是 XSLT 的新手。抱歉,如果这是一个非常简单的问题。
提前致谢。
Sorry, if this is a very simple question.
不,这一点都不简单。试试这个方法:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="sorted-names">
<xsl:perform-sort select="/root/Name">
<xsl:sort select="."/>
</xsl:perform-sort>
</xsl:variable>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Name">
<xsl:copy-of select="$sorted-names/Name[count(current()/preceding-sibling::Name) + 1]"/>
</xsl:template>
</xsl:stylesheet>
请注意,这假定一个格式正确的 XML 输入,具有单个根元素。
我正在尝试使用 XSLT
对以下 XML 进行排序<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>
预期输出是
<Name>name1</Name>
<Job>x</Job>
<Name>name2</Name>
<Job>y</Job>
<Name>name3</Name>
必须对 Name 元素进行排序,同时保持 Job 元素的完整性。 我正在使用 XSLT 2.0
尽管我能够使用 tutorial 中给出的 xsl:sort 正确排序 Name 元素,但我得到的输出如下:
<Name>name1</Name>
<Name>name2</Name>
<Name>name3</Name>
<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>
我是 XSLT 的新手。抱歉,如果这是一个非常简单的问题。 提前致谢。
Sorry, if this is a very simple question.
不,这一点都不简单。试试这个方法:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="sorted-names">
<xsl:perform-sort select="/root/Name">
<xsl:sort select="."/>
</xsl:perform-sort>
</xsl:variable>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Name">
<xsl:copy-of select="$sorted-names/Name[count(current()/preceding-sibling::Name) + 1]"/>
</xsl:template>
</xsl:stylesheet>
请注意,这假定一个格式正确的 XML 输入,具有单个根元素。