1

この質問に投稿されたすべての解決策を試しました。私の質問に似ていますが、解決策がうまくいきません。

の外側にあるプレーンテキストを取得しようとしていますが<b>、それは の内側にあるはず<div id="maindiv>です。

<div id=maindiv>
     <b>I don't want this text</b>
     I want this text
</div>

$partは、 を含むオブジェクトです<div id="maindiv">。今私はこれを試しました:

$part->find('!b')->innertext;

上記のコードは機能しません。これを試したところ

$part->plaintext;

このようにすべてのプレーンテキストを返しました

I don't want this text I want this text

公式ドキュメントを読みましたが、これを解決するものは何も見つかりませんでした:

4

2 に答える 2

0

クエリ:

$selector->query('//div[@id="maindiv"]/text()[2]')

説明:

//               - selects nodes regardless of their position in tree

div              - selects elements which node name is 'div'

[@id="maindiv"]  - selects only those divs having the attribute id="maindiv"

/                - sets focus to the div element

text()           - selects only text elements

[2]              - selects the second text element (the first is whitespace)

                   Note! The actual position of the text element may depend on
                   your preserveWhitespace setting.

                   Manual: http://www.php.net/manual/de/class.domdocument.php#domdocument.props.preservewhitespace

例:

$html = <<<EOF
<div id="maindiv">
     <b>I dont want this text</b>
     I want this text
</div>
EOF;

$doc = new DOMDocument();
$doc->loadHTML($html);

$selector = new DOMXpath($doc);   

$node = $selector->query('//div[@id="maindiv"]/text()[2]')->item(0);
echo trim($node->nodeValue); // I want this text
于 2013-05-04T10:18:12.123 に答える
0

最初のものを削除し<b>ます:

$part->find('b', 0)->outertext = '';
echo $part->innertext; // I want this text
于 2014-03-16T20:07:09.500 に答える