如何使用PHP的DOMDocument获取元素的序列化HTML?

011*_*010 4 php dom domdocument

这是我的示例脚本:

$html = <<<HTML
<div class="main">
    <div class="text">
    Capture this text 1
    </div>
    <div class="date">
    May 2010
    </div>
</div>
<div class="main">
    <div class="text">
    Capture this text 2
    </div>
    <div class="date">
    June 2010
    </div>
</div>
HTML;

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

$xpath = new DOMXPath($dom);


$tags = $xpath->query('//div[@class="main"]');
foreach ($tags as $tag) {
    print_r($tag->nodeValue."\n");
}
Run Code Online (Sandbox Code Playgroud)

这将是:

Capture this text 1 May 2010
Capture this text 2 June 2010 
Run Code Online (Sandbox Code Playgroud)

但我需要它输出:

<div class="text">
Capture this text 2
</div>
<div class="date">
June 2010
</div>
Run Code Online (Sandbox Code Playgroud)

或者至少可以在我的foreach循环中做这样的事情:

$text = $tag->query('//div[@class="text"]')->nodeValue;
$date = $tag->query('//div[@class="date"]')->nodeValue;
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 6

好吧,nodeValue会给你节点的价值.你想要通常所说的outerHTML

echo $dom->saveXml($tag);
Run Code Online (Sandbox Code Playgroud)

将以符合X(HT)ML的方式输出您要查找的内容.


从PHP 5.3.6开始,您也可以传递一个节点saveHtml,这在以前是不可能的:

echo $dom->saveHtml($tag);
Run Code Online (Sandbox Code Playgroud)

后者将遵循HTML4语法.感谢Artefacto.