このXPath式:
/*/*[2]/TD
[position()
=
count(/*/*[1]
/TD[.=$pName]/preceding-sibling::TD
) +1
]
は、あなたが上記の式でに置き換えた場合、このように変数pName
に指定された「名前」に対応する「値」とTD
を選択'Field 2'
を選択すると、次が選択されます。
<TD colSpan="2">Value for Field2</TD>
注:このXPath式は、2つの行の番号が異なるの場合でも、正しいノードを選択します。
TD
のテキストの子ノードのみを選択する場合は、に/text()
を追加します。
を使用し、単なる文字列値を取得するには:
string(/*/*[2]/TD
[position()
=
count(/*/*[1]
/TD[.=$pName]/preceding-sibling::TD
) +1
]
)
ここでは、希望値が取得されることを証明短いXSLT変換である:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pName" select="'Field 2'"/>
<xsl:template match="/">
<xsl:value-of select=
"/*/*[2]/TD
[position()
=
count(/*/*[1]
/TD[.=$pName]/preceding-sibling::TD
) +1
]
"/>
</xsl:template>
</xsl:stylesheet>
この変換されたとき提供されたXML文書(整形式に固定されている):
<TABLE>
<TR>
<TD>Field 1</TD>
<TD colSpan="2">Field 2</TD>
<TD>Field 3</TD>
</TR>
<TR>
<TD>Value for Field1</TD>
<TD colSpan="2">Value for Field2</TD>
<TD>Value for Field3</TD>
<TR></TR></TR>
</TABLE>
希望の結果が生成されます。私たちはあなたが引っかかって、より良いアイデアを持っているので、
Value for Field2
あなたのXPath文字列を投稿することができますか? –
良い質問、+1。 2行の 'TD 'の数が異なる場合でも正しいノードを選択する簡単で簡単なXPath式については、私の答えを見てください。 :) –