XSLT を使用して、列に特定の値 (この場合は「I Want You」というテキスト) が含まれている場合、特定の列内のすべてのノードに値 (この場合は「I added This」という文字列) を追加しようとしています。 2.0。
これは、次の表がある場合を意味します。
<table>
<tr>
<th>header value</th>
<th>I Want You</th>
<th>header value</th>
</tr>
<tr>
<td>value 1</td>
<td>value 2</td>
<td>value 3</td>
</tr>
<tr>
<td>value 4</td>
<td>value 5</td>
<td>value 6</td>
</tr>
</table>
xslt スクリプトを適用した後の出力は次のようになります。
<table>
<tr>
<th>header value</th>
<th>I Want You</th>
<th>header value</th>
</tr>
<tr>
<td>value 1</td>
<td>I Added This value 2</td>
<td>value 3</td>
</tr>
<tr>
<td>value 4</td>
<td>I Added This value 5</td>
<td>value 6</td>
</tr>
</table>
それを達成するために、私は多くの異なるスタイルシートを書きましたが、近づくことさえできませんでした:
テーブル全体のコピー:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
これにより、変更したい列の値が取得されますが、そこから、「この値を追加しました」というフレーズを各 td 値の先頭に追加する方法がわかりません。
<xsl:template match="//th[contains(lower-case(.), 'I Want You')]">
<xsl:variable name="tdPos" select="count(preceding-sibling::td)+2"/>
<xsl:for-each select="current()/parent::*/following-sibling::tr">
<xsl:value-of select="./td[$tdPos]/text()"/>
</xsl:for-each>
</xsl:template>
私を正しい方向に向けるかもしれないヒントは大歓迎です!