14

現在の状況の説明:

ページでいっぱいのフォルダー (pages-folder) があり、そのフォルダー内の各ページには (とりわけ) の div がありid="short-info"ます。そのフォルダーから
すべてをプルし、その中にテキストを表示するコードがあります(これは、この目的では と同じです)<div id="short-info">...</div>textContentnodeValue

div をロードするコード:

<?php
$filename = glob("pages-folder/*.php");
sort($filename);
foreach ($filename as $filenamein) {
    $doc = new DOMDocument();
    $doc->loadHTMLFile($filenamein);
    $xpath = new DOMXpath($doc);
    $elements = $xpath->query("*//div[@id='short-info']");

        foreach ($elements as $element) {
            $nodes = $element->childNodes;
            foreach ($nodes as $node) {
                echo $node->textContent;
            }
        }
}
?>

ここでの問題は、読み込んでいるページに image: のような子がある場合、出力は画像ではなくHello world<div id="short-info"> <img src="picture.jpg"> Hello world </div>のみになり、次にHello worldになることです。

質問:

テキストだけでなく、たとえばその画像を含む div id="short-info" 内の完全な html をコードに表示するにはどうすればよいですか?

4

2 に答える 2

39

ノードで文書化されていない呼び出しを行う必要があります。

$node->c14n()に含まれるHTMLを提供します$node

クレイジーだよね?あの髪の毛を少し失いました。

http://php.net/manual/en/class.domnode.php#88441

アップデート

これにより、厳密なHTMLに準拠するようにhtmlが変更されます。使用する方が良いです

$html = $Node->ownerDocument->saveHTML( $Node );

その代わり。

于 2011-07-18T21:48:06.913 に答える
2

PHPのdomが直接サポートしていない「innerHTML」に相当するものが必要です。その回避策の1つは、PHPのドキュメントにあります

もう1つのオプションは、$node見つけたものを取得し、それを新しいDOMドキュメントの最上位要素として挿入してから、saveHTML()その新しいドキュメントを呼び出すことです。

于 2011-07-18T21:48:42.147 に答える