我遇到需要提取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。
答案 0 :(得分:1)
你是对的,这可以通过DOMDocument和XPath来实现,如下所示:
$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>
。