我需要为子节点编号,使其与xml中存在的次数一致 例如,如果xml看起来像这样
<Orders>
<Date>23-jan-2014</Date>
<Order>
<Code>Abc</Code>
</Order>
<Order>
<Code>Abc</Code>
</Order>
<Order>
<Code>Abc</Code>
</Order>
</Orders>
我需要这样
<Orders>
<Date>23-jan-2014</Date>
<Order>
<Sq>1</Sq>
<Code>Abc</Code>
</Order>
<Order>
<Sq>2</Sq>
<Code>Abc</Code>
</Order>
<Order>
<Sq>3</Sq>
<Code>Abc</Code>
</Order>
.
.
.
.
</Orders>
答案 0 :(得分:3)
这是一个使用xsl:number
代替position()
的选项。 xsl:number比position()
更强大,所以如果您的输入比您的示例更复杂,它可能会派上用场。
XML输入
<Orders>
<Date>23-jan-2014</Date>
<Order>
<Code>Abc</Code>
</Order>
<Order>
<Code>Abc</Code>
</Order>
<Order>
<Code>Abc</Code>
</Order>
</Orders>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Order">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<Seq><xsl:number/></Seq>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML输出
<Orders>
<Date>23-jan-2014</Date>
<Order>
<Seq>1</Seq>
<Code>Abc</Code>
</Order>
<Order>
<Seq>2</Seq>
<Code>Abc</Code>
</Order>
<Order>
<Seq>3</Seq>
<Code>Abc</Code>
</Order>
</Orders>
答案 1 :(得分:2)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Orders">
<xsl:copy>
<xsl:copy-of select="Date"/>
<xsl:apply-templates select="Order"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Order">
<xsl:copy>
<Sq><xsl:value-of select="position()"/></Sq>
<xsl:copy-of select="*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>