提取HTML文档的一部分 - 需要包含xHTML标记

时间:2012-07-16 17:06:46

标签: php regex xpath domdocument domxpath

我遇到需要提取xHTML页面的一部分的情况,包括标记。

在这种情况下的正则表达式不是正确的路由,因为我无法保证子div的确切数量。

<div id="myDiv">
    <div><p>This is some content</p></div>
    <div><p>This additional content</p></div>
</div>

因此,在上面的代码片段中,我需要提取包含标记的<div><p>This is some content</p></div>

我已经做了一些研究使用xPath,它似​​乎是完成这一步的方法,但我不知道如何让它不仅返回节点的值,而且还返回所有关联的标记-up。

1 个答案:

答案 0 :(得分:1)

你是对的,这可以通过DOMDocumentXPath来实现,如下所示:

$doc = new DOMDocument();
$doc->loadHTML( $html); // Load the HTML snippet

$xpath = new DOMXPath( $doc);
$node = $xpath->query( '//div[@id="myDiv"]/div')->item(0); // Get the <div>

$saved_node = $doc->saveHTML( $node); // Export that node

the output中,您可以看到所需的字符串,包括标记:

string(62) "<div><p>This is some content</p></div>" 

请注意,我必须通过htmlentities()运行输出,这样您就可以在不查看页面来源的情况下看到<div>