0

PHP を使用して、どのタグにもラップされていないプレーン テキストを抽出しようとしています。説明する最善の方法は、示すことです。

<div>
    <span>Hello</span>
        THIS IS THE TEXT I WANT TO EXTRACT
    <span>this is some other text</span>
    <div><span>pow</span></div>
</div>

私が試してみようとしているのは、div内のすべてのdom要素をループして削除することです。これにより、テキストが残るはずです。しかし、もっとエレガントな方法があることを願っています:)

ありがとう

アンディ

4

2 に答える 2

3

私があなたの質問を正しく読んでいれば、要素のテキストを取得したいのですが、子要素のテキストは除外します。

JavaScript を使用すると、ここに解決策があります。

http://www.stevefenton.co.uk/Content/Blog/Date/201007/Blog/Jquery-Get-Text-While-Exclusive-Children/

要約すると、あなたはこれを行うでしょう...

$("#mydiv").clone().children().remove().end().text();

PHP(phpqueryを使用)では、これは...

$phpqueryObj = phpQuery::newDocument(DOMinnerHTML($INNERHTMLOFYOURDOMELEMENT));
$text = $phpqueryObj->clone()->children()->remove()->end()->text();

jQuery / JavaScript がなければ、同様のプロセスを手動で実行する必要があります。つまり、要素の複製バージョンから子要素を削除してから、内部テキストを取得します。

于 2011-05-19T12:22:04.990 に答える
1

最も簡単な方法は、コンテキスト ノードを指定して XPath を使用することでしょう。

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
//find all div nodes
foreach ($xpath->query('//div') as $div) {
   //get any immediate child text nodes
   foreach ($xpath->query('text()', $div) as $text) {
      echo "$text->nodeValue\n";
   }
}

最初のクエリはすべてのdivを返すことに注意してください。そのため、必要な div をより具体的にする必要があります。

あなたの例で上記のコードをテストしましたが、動作します。

于 2011-05-19T12:27:11.087 に答える