サンプル xslt にこのコードがあり、この部分を正確に作成できませんでした。この部分を理解したいseq_no[/*/*/seq_no[@num = following::seq_no/@num]]
。何か案が?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="seq_no[/*/*/seq_no[@num = following::seq_no/@num]]">
<seq_no num="[{count(preceding::seq_no)+1}]{.}">
<xsl:apply-templates/>
</seq_no>
</xsl:template>
</xsl:stylesheet>
これが入力です
<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>
これが出力です
<xml>
<staff>
<seq_no num="[1]0">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]2">2</seq_no>
<name>abc</name>
</staff>
<staff>
<seq_no num="[4]3">3</seq_no>
<name>abc</name>
</staff>
</xml>