我有一个 xml 文档:
<xml>
<staff>
<seq_no num="0">0</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="1">1</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="1">2</seq_no>
<name>abc</name>
</staff>
<staff>
<seq_no num="3">3</seq_no>
<name>abc</name>
</staff>
</xml>
如果任何 seq_no 相同,我想将数字添加到 seq_no/@num。如果没有重复,则不会添加任何内容。
上面的输出应该是:
<xml>
<staff>
<seq_no num="[1]1">0</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="[2]1">1</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="[3]1">2</seq_no>
<name>abc</name>
</staff>
<staff>
<seq_no num="[4]3">3</seq_no>
<name>abc</name>
</staff>
</xml>
将 [1],[2],[3],[4] 分别添加到 seq_no/@num。我开始使用这样的匹配模板
<xsl:template match="seq_no/num">
<seq_no>
<xsl:attribute name="num">
<xsl:text>[</xsl:text><xsl:number select="." format="1" level="any" /><xsl:text>]</xsl:text>
<xsl:value-of select="@num"></xsl:value-of>
</xsl:attribute>
<xsl:value-of select="."></xsl:value-of>
</seq_no>
</xsl:template>
但是在控制位置以及如何检查其他 seq_no 的重复 num 时遇到麻烦...
输入没有任何重复的数字:
<xml>
<staff>
<seq_no num="0">0</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="1">1</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="2">2</seq_no>
<name>abc</name>
</staff>
<staff>
<seq_no num="3">3</seq_no>
<name>abc</name>
</staff>
</xml>.
输出应与输入相同,无需处理。
<xml>
<staff>
<seq_no num="0">0</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="1">1</seq_no>
<name>xyz</name>
</staff>
<staff>
<seq_no num="1">2</seq_no>
<name>abc</name>
</staff>
<staff>
<seq_no num="3">3</seq_no>
<name>abc</name>
</staff>
</xml>