私は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>
seq_no/@numにそれぞれ[1]、[2]、[3]、[4]を追加。このようなマッチテンプレートで作業を開始しました
<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の重複番号をチェックする方法も...
数値を重複させずに入力:
<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>