2012-02-08 7 views
6

を除外:選択のnodeValueけどさんが、私はこのコードを持っていると言う子要素

<p dataname="description"> 
Hello this is a description. <a href="#">Click here for more.</a> 
</p> 

にはどうすればpののnodeValueを選択するが、aを除外し、それはコンテンツのですか?

私の現在のコード:

$result = $xpath->query("//p[@dataname='description'][not(self::a)]"); 

PHPのXPathがこれをサポートしていますが、このXPathはScrapy(Pythonのベースの擦過フレームワーク)で私のためにトリックをした場合、私は$result->item(0)->nodeValue;

答えて

10

は単に追加/テキスト()トリックに

$result = $xpath->query("//p[@dataname='description'][not(self::a)]/text()"); 
+0

を行う必要がありますuがplsは説明してもらえますか? – Michelle

+2

/text()がなければ、子ノードを含むノード全体を選択します。要素ノードにはテキスト自体がありません。テキストノードはテキストノードという子ノードに格納されます。 nodeValueは、ノードのテキスト値を取得するために使用されます。子ノードを持つノードでnodeValueを呼び出すと、すべての子テキストノードが取得され、連結されます。/text()を使用すると、text型の最初の子ノードのみを取得するため、このテキストノードのテキストのみを取得します – Kristofer

2

わからないことによってそれを選択します。

$xpath->query('//p[@dataname='description']/text()[following-sibling::a]') 

これが機能しない場合は、Kristoffersソリューションを試してください。また、正規表現ソリューションを使用することもできます。たとえば、次のHTMLタグによってカプセル化されていないテキストを除いて、その中の任意のコンテンツを任意のHTMLタグを削除します

$output = preg_replace("~<.*?>.*?<.*?>~msi", '', $result->item(0)->nodeValue);

。それはそのようなもので、なぜあなたのクエリに

関連する問題