私はXPathを初めて使用するので、我慢してください。XPath式があります
'.//*[contains(.,"Obama")]/text()'
それは私に「オバマ」を含むテキストを取得します。しかし、私は追加する方法を理解することができませんでした
and [not(contains(., "Romney"))]
構文エラーを取得せずに式に変換します。それはどのように行われますか?多くのappriciatedを助けてください!
私はXPathを初めて使用するので、我慢してください。XPath式があります
'.//*[contains(.,"Obama")]/text()'
それは私に「オバマ」を含むテキストを取得します。しかし、私は追加する方法を理解することができませんでした
and [not(contains(., "Romney"))]
構文エラーを取得せずに式に変換します。それはどのように行われますか?多くのappriciatedを助けてください!
これを試して:
'.//*[contains(.,"Obama")][not(contains(.,"Romney"))]/text()'
必要な数の述語を次々に配置できます。
[a][b][c]
使用:
.//*[contains(.,"Obama") and not(contains(.,"Romney"))]/text()
XSLTベースの検証:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:copy-of select=
'.//*[contains(.,"Obama") and not(contains(.,"Romney"))]/text()'/>
</xsl:template>
</xsl:stylesheet>
この変換が次のXMLドキュメントに適用される場合:
<election>
<choice>Maybe Obama</choice>
<choice>Maybe Romney</choice>
</election>
XPath式が評価され、選択したノードが出力にコピーされます。
Maybe Obama
注意してください:
SomeExpression[x][y]
常に同等であるとは限りません:
SomeExpression[x and y]
したがって、@ ChrisGerkenの回答で指定されているように、前者ではなく後者をお勧めします。
具体的な例を次に示します。
このXMLドキュメントを作成しましょう:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
そしてこれらの2つのXPath式:
/*/*[. mod 3 = 0 and position() = 3]
と
/*/*[. mod 3 = 0][position() = 3]
最初の式は以下を選択します:
<num>03</num>
ただし、2番目の式は以下を選択します。
<num>09</num>
そして、これが完全なXSLTベースの検証です。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*/*[. mod 3 = 0 and position() = 3]"/>
================
<xsl:copy-of select=
"/*/*[. mod 3 = 0][position() = 3]"/>
</xsl:template>
</xsl:stylesheet>
この変換が上記のXMLドキュメントに適用されると、2つのXPath式が評価され、これらの評価の結果が出力にコピーされます。
<num>03</num>
================
<num>09</num>
説明:
position()
は*context-sensitive`関数であり、通常、k番目とm番目の述語で使用すると異なる結果を生成します。ここでk!= m