我的xml节点元素未使用RowNumber序列进行排序。我想对我的xml进行排序,但使用新的序列号
更新RowNumber元素输入(RowNumber是顺序的)并且可以有更多字段作为行元素
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Row>
<field_01>G</field_01>
<field_02>foo</field_02>
<RowNumber>1</RowNumber>
</Row>
<Row>
<field_01>A</field_01>
<field_02>foo</field_02>
<RowNumber>2</RowNumber>
</Row>
<Row>
<field_01>B</field_01>
<field_02>foo</field_02>
<RowNumber>3</RowNumber>
</Row>
<Row>
<field_01>H</field_01>
<field_02>foo</field_02>
<RowNumber>4</RowNumber>
</Row>
<Row>
<field_01>D</field_01>
<field_02>foo</field_02>
<RowNumber>5</RowNumber>
</Row>
<Row>
<field_01>M</field_01>
<field_02>foo</field_02>
<RowNumber>6</RowNumber>
</Row>
<Row>
<field_01>U</field_01>
<field_02>foo</field_02>
<RowNumber>7</RowNumber>
</Row>
<Row>
<field_01>W</field_01>
<field_02>foo</field_02>
<RowNumber>8</RowNumber>
</Row>
<Row>
<field_01>Z</field_01>
<field_02>foo</field_02>
<RowNumber>9</RowNumber>
</Row>
<Row>
<field_01>L</field_01>
<field_02>foo</field_02>
<RowNumber>10</RowNumber>
</Row>
</root>
当前的XSLT ...从阅读中我可能不得不使用xlt:number或position()但我无法理解如何在这里应用它 所以,我当前的XSL对它进行了排序,但我无法使用新序列
更新RowNumber <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- identity transform -->
<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="Row">
<xsl:sort select="field_01" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
所需输出
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Row>
<field_01>A</field_01>
<field_02>foo</field_02>
<RowNumber>1</RowNumber>
</Row>
<Row>
<field_01>B</field_01>
<field_02>foo</field_02>
<RowNumber>2</RowNumber>
</Row>
<Row>
<field_01>D</field_01>
<field_02>foo</field_02>
<RowNumber>3</RowNumber>
</Row>
<Row>
<field_01>G</field_01>
<field_02>foo</field_02>
<RowNumber>4</RowNumber>
</Row>
<Row>
<field_01>H</field_01>
<field_02>foo</field_02>
<RowNumber>5</RowNumber>
</Row>
<Row>
<field_01>L</field_01>
<field_02>foo</field_02>
<RowNumber>6</RowNumber>
</Row>
<Row>
<field_01>M</field_01>
<field_02>foo</field_02>
<RowNumber>7</RowNumber>
</Row>
<Row>
<field_01>U</field_01>
<field_02>foo</field_02>
<RowNumber>8</RowNumber>
</Row>
<Row>
<field_01>W</field_01>
<field_02>foo</field_02>
<RowNumber>9</RowNumber>
</Row>
<Row>
<field_01>Z</field_01>
<field_02>foo</field_02>
<RowNumber>10</RowNumber>
</Row>
</root>
答案 0 :(得分:2)
这样吗?
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:for-each select="Row">
<xsl:sort select="field" data-type="text" order="ascending"/>
<xsl:copy>
<xsl:copy-of select="field"/>
<RowNumber><xsl:value-of select="position()"/></RowNumber>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我目前的XSL对其进行排序
我不这么认为。 尝试按@field
属性排序 - 但您的XML没有此类属性。
鉴于您修改了输入,我建议您尝试一种不同的方法:
<xsl:stylesheet version="1.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="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- sort Rows -->
<xsl:template match="/root">
<xsl:copy>
<xsl:apply-templates select="Row">
<xsl:sort select="field_01" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<!-- renumber -->
<xsl:template match="Row">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<RowNumber><xsl:value-of select="position()"/></RowNumber>
</xsl:copy>
</xsl:template>
<!-- suppress old numbering -->
<xsl:template match="RowNumber"/>
</xsl:stylesheet>