web-dev-qa-db-ja.com

XPathでノード値/ innerHTMLを取得する方法は?

必要なクラスを選択するXPathがあります://div[@class='myclass']。しかし、それはdiv全体を返します(<div class='myclass'>も、しかし、タグ自体ではなく、このタグのコンテンツのみを返したいと思います。どうすればいいですか?

32

Xpathの場合、返されるものは、条件ではないパスの最後のものです。どういう意味?まあ、条件は_[]_の間のものですが(あなたはすでにそれを知っています)、あなたの読み取りはpathElement [値 'my class'の 'class'属性を持っています]。 pathElementは_[_の直前にあります。

_[]_の外側のものはすべてパスなので、_//a/b/c[@blah='bleh']/d_abcおよびdはすべてパス要素、blahは属性、blehリテラル値。このパスが一致する場合、d、最後の非条件物が返されます。

特定のパスは、(一連の)divを返します。これは、xpathのパスの最後のものです。したがって、この戻り値には、トップレベルノード、div、およびその下(それら)のすべての(それらの)子が含まれます。ノードは、要素またはテキスト(またはコメント、処理命令など)にすることができます。

ノードの下には複数のテキストノードが存在する可能性があるため、配列pOcHaが語っています。 x/text()はxの直接の子であるすべてのテキストを返し、x/node()はすべての子ノード、includeテキストを返します。

お役に立てれば。

34
jos
node() = innerXml

text() = innerText

両方とも配列なので、text()[1]は最初の子テキストノードです...

41

古いよくある質問に対する新しい回答:

このXMLについて

<div class="myclass">content</div>

xPathを使用して、次の2つの方法のいずれかでcontentのみを選択できます。

  1. テキストNode Selection

    このXPath、

    //div[@class='myclass']/text()
    

    要求されたdiv要素、contentのテキストノードの子を選択します。

  2. 要素の文字列値

    このXPath、

    string(//div[@class='myclass'])
    

    リクエストされたdiv要素のcontentの-​​ string-value を返します。

    詳細:ここに の説明string-valuesの要素:

    要素ノードの string-value は、すべてのテキストノードの string-value sを連結したものです descendants ドキュメント順の要素ノードの。

5
kjhughes

あなたが試すことができます

// div [@ class = 'myclass']/child :: *

child :: *は、コンテキストノードのすべての要素の子を選択します 詳細を参照

2
sajith