出力を追加したいのですが<LineNum>[number]</LineNum>
、値が異なる場合、LineNumは再び「1」から開始する必要があります。<cell num="4">
ソースxml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<table>
<sheet name="Notification" num="1">
<row num="1">
<cell num="1">IBD</cell>
<cell num="2">YES</cell>
<cell num="3">6600027830(010000)</cell>
<cell num="4">800015001</cell>
</row>
<row num="2">
<cell num="1">IBD</cell>
<cell num="2">YES</cell>
<cell num="3">6600027830(010000)</cell>
<cell num="4">800015001</cell>
</row>
<row num="3">
<cell num="1">IBD</cell>
<cell num="2">YES</cell>
<cell num="3">6600027831(010000)</cell>
<cell num="4">800015002</cell>
</row>
<row num="4">
<cell num="1">IBD</cell>
<cell num="2">YES</cell>
<cell num="3">6600027831(010000)</cell>
<cell num="4">800015002</cell>
</row>
<row num="5">
<cell num="1">IBD</cell>
<cell num="2">YES</cell>
<cell num="3">6600027831(010000)</cell>
<cell num="4">800015002</cell>
</row>
</sheet>
</table>
この場合はそうなります:
<cell num="4">800015001</cell>
<LineNum>1</LineNum>
<cell num="4">800015001</cell>
<LineNum>2</LineNum>
<!-- cell num="4" different from previous, start LineNum from 1 -->
<cell num="4">800015002</cell>
<LineNum>1</LineNum>
<cell num="4">800015002</cell>
<LineNum>2</LineNum>
<cell num="4">800015002</cell>
<LineNum>3</LineNum>
グローバル変数を追加し、それにセルnum = "4"を割り当ててから、現在の値がグローバル変数と同じかどうかを確認します。そうでない場合は、LineNumを1から再開し、グローバル変数を再割り当てします。残念ながら、XSLTは再割り当てを提供していません。
私に何ができる?
UPD: 他の質問の例をなんとかして変更しようとしていましたXSL:以前のユニークな兄弟を数えていますが、運がありません。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<!-- don't copy whitespace -->
<xsl:template match="text()"/>
<xsl:template match="row/cell[@num=4]">
<xsl:variable name="roles-so-far" select=". | preceding::row/cell[@num=4]"/>
<xsl:value-of select="count($roles-so-far)"/>
<xsl:value-of select="' '"/>
<xsl:value-of select="."/>
<!-- Only select the first instance of each ROLE name -->
<xsl:variable name="roles-so-far-unique"
select="$roles-so-far[not(. = preceding-sibling::row/cell[@num=4])]"/>
<xsl:apply-templates select="/"/>
<xsl:text> </xsl:text>
<xsl:value-of select="count($roles-so-far-unique)"/>
<xsl:text>
</xsl:text> <!-- linefeed -->
</xsl:template>
</xsl:stylesheet>