1

HTMLページで特別なdivを取得するためにDOMDocumentを使用しています。

div タグなしで、この div のコンテンツを取得したいだけです。

例えば ​​:

$dom = new DOMDocument;
$dom->loadHTML($webtext['content']);
$main = $dom->getElementById('inter');
$dom->saveHTML()

ここに、結果があります:

<div id="inter">
//SOME THINGS IN MY DIV
</div>

そして、私はただ持っていたい:

//SOME THINGS IN MY DIV

アイデア?ありがとう !

4

3 に答える 3

6

私はシンプルに行くつもりです。あなたはすでに持っています:

$dom = new DOMDocument;
$dom->loadHTML($webtext['content']);
$main = $dom->getElementById('inter');
$dom->saveHTML();

今、を持つ拡張するものDOMDocument::getElementById()を返します。その 内にテキスト以外のものを期待しているかどうかを指定していないので、そこにプレーンテキストとして保存される可能性のあるものは何でも必要であると仮定します。そのために、 を削除し、代わりに次のように置き換えます。 DOMElementDOMNodepublic stringnodeValuediv$dom->saveHTML();

$divString = $main->nodeValue;

それで、あなたの例から、望ましい出力である$divStringが含まれます。//SOME THINGS IN MY DIV

ただし、文字列表現だけでなく、その内部の HTML が必要な場合は、代わりに次のように置き換えます。

$divString = "";
foreach($main->childNodes as $c) 
    $divString .= $c->ownerDocument->saveXML($c);

これは、独自の DOMNode を含む each を含む inherited を利用して (参照用、上記を参照)、それぞれをループしてDOMNode::childNodeswhichを取得し、関数を呼び出します。現在のノードを関数に渡す理由は、有効なドキュメント全体が出力されないようにするためです。これは、ループしているものであるため、一度に 1 つずつ子を取得する必要があり、子を残さないようにする必要があります。(すみません、遅くなりました、我慢できませんでした。)DOMNodeListownerDocumentDOMDocumentDOMDocument::saveXML()$cownerDocument

さて、どちらのオプションを選択した後でも、自分のやりたいことを実行できます$divString。これがプロセスの説明に役立つことを願っています。機能するという理由だけでコードをコピーするのではなく、何が起こっているのかをよりよく理解していただければ幸いです。^^

于 2013-04-15T09:38:45.517 に答える
0

あなたはxpathを使うことができます

 $xpath = new DOMXPath($xml);

foreach($xpath->query('//div[@id="inter"]/*') as $node)
{
  $node->nodeValue
}

または簡単にコードを編集できます。ここを参照

$main = $dom->getElementById('inter');

echo  $main->nodeValue
于 2013-04-15T08:37:47.253 に答える