输入XML
<root>
<Bank>
<BankDetail>
<Name1>BankName</Name1>
<Name2>TestBank</Name2>
</BankDetail>
</Bank>
<Item>
<Item1>Text</Item1>
</Item>
<Item>
<Item1>Text</Item1>
</Item>
<Item>
<Item1>Text</Item1>
</Item>
<Item>
<Item1>Text</Item1>
</Item>
<Item>
<Item1>Text</Item1>
</Item>
</root>
我想用 BankItem 1、BankItem 4、BankItem 2、BankItem 5 和 BankItem 3 更新
所以输出将是
<root>
<Bank>
<BankDetail>
<Name1>BankName</Name1>
<Name2>TestBank</Name2>
</BankDetail>
</Bank>
<Item>
<Item1>BankItem - 1</Item1>
</Item>
<Item>
<Item1>BankItem - 4</Item1>
</Item>
<Item>
<Item1>BankItem - 2</Item1>
</Item>
<Item>
<Item1>BankItem - 5</Item1>
</Item>
<Item>
<Item1>BankItem - 3</Item1>
</Item>
</root>
我已经使用循环完成了此操作。但出于学习目的,我不想使用 For Each 循环。我想通过模板匹配来更新它。我有什么办法可以实现这个目标吗?请推荐。
我没有它工作。我尝试了几个步骤,但后来我觉得我需要一些建议。
<xsl:template match="root/Item/Item1">
<xsl:variable name="i" select="position()" />
<xsl:copy>
<xsl:value-of select="Item1[$i]"/>
</xsl:copy>
</xsl:template>
获得所需输出的一种方法是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Item1">
<xsl:variable name="i">
<xsl:number level="any"/>
</xsl:variable>
<xsl:copy>
<xsl:text>BankItem - </xsl:text>
<xsl:value-of select="substring('14253', $i, 1)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
很难判断这是否满足您的目标,因为所需转换的逻辑尚不清楚。