6

HTMLページの要素を取得するためにsimple_html_domを使用しています。このような div 要素がいくつかあります。私が望むのは、各div(サブ要素内にはない)で「Fine Thanks」文を取得することだけです。どうすればできますか?

<div class="right">
<h2>
<a href="">Hello</a>
</h2>
<br/>
<span>How Are You?</span>
<span>How Are You?</span>
<span>How Are You?</span>
Fine Thanks
</div>
4

4 に答える 4

2

単純なはずです$html->find('div.right > text')が、Simple HTML DOM Parser は直接の子孫クエリをサポートしていないように見えるため、うまくいきません。

したがって、最初にすべての要素を見つけて<div>、子ノードでテキスト ノードを検索する必要があります。残念ながら、->childNodes()メソッドはにマップされているため->children()、要素のみを返します。

->find('text')実際の解決策は、各要素を呼び出す<div>ことです。その後、親ノードに基づいて結果をフィルタリングします。

foreach ($doc->find('div.right') as $parent) {
    foreach ($parent->find('text') as $node) {
        if ($node->parent() === $parent && strlen($t = trim($node->plaintext))) {
            echo $t, PHP_EOL;
        }
    }
}

を使用するDOMDocumentと、この XPath 式は苦労せずに同じ作業を行います。

$doc = new DOMDocument;
$doc->loadHTML($content);
$xp = new DOMXPath($doc);

foreach ($xp->query('//div/text()') as $node) {
    if (strlen($t = trim($node->textContent))) {
        echo $t, PHP_EOL;
    }
}
于 2013-04-11T07:34:56.153 に答える
0
public function removeNode($selector)
{
  foreach ($html->find($selector) as $node)
  {
    $node->outertext = '';
  }

 $this->load($this->save());        
}

この関数を使用して、div から h2 および span 要素を削除します。次に、div 要素のデータを取得します。

参考URL:簡易HTML Dom:要素を削除するには?

于 2013-04-11T06:47:25.730 に答える