假设我有以下HTML代码:
<p>Test text</p>
<p><img src="test.jpg" /></p>
<div id="test"><p>test</p></div>
<div class="block">
<img src="test2.jpg">
</div>
<p>test</p>
参数:
我使用PHP的XPath来使用DOM查看此HTML代码。我希望能够归还两件事:
类似的东西:
区块代码:
<div class="block">
<img src="test2.jpg">
</div>
没有区块代码的原始文件:
<p>Test text</p>
<p><img src="test.jpg" /></p>
<div id="test"><p>test</p></div>
<p>test</p>
答案 0 :(得分:1)
使用DOMDocument
可以这样做:
$content = '<p>Test text</p>'.
'<p><img src="test.jpg" /></p>'.
'<div id="test"><p>test</p></div>'.
'<div class="block">'.
'<img src="test2.jpg">'.
'</div>'.
'<p>test</p>';
$blocks = array();
$doc = new DOMDocument();
$doc->loadHTML($content);
$elements = $doc->getElementsByTagName("*");
foreach ($elements as $element) {
if($element->hasAttributes()) {
if ($element->getAttribute('class') == 'block') {
//add block HTML to block array
$blocks[]=$doc->saveHTML($element);
//remove blocck element
$element->parentNode->removeChild($element);
}
}
}
echo '<pre>';
echo $blocks[0]; //iterate or print_r if multiple blocks
echo $doc->saveHTML();
echo '</pre>';
输出&#34;块代码&#34; :
<div class="block"><img src="test2.jpg"></div>
和#34;原版没有块代码&#34; :
<p>Test text</p><p><img src="test.jpg"></p><div id="test"><p>test</p></div><p>test</p>
如果你只是不能接受DOMDocument&#34;丰富&#34;带有doctype,html和body的HTML,如果你想要完整的文档,而不仅仅是一些提取,你可以use this neat function并使用以下内容提取body innerHTML,这可能非常烦人。
echo DOMinnerHTML($doc->getElementsByTagName('body')->item(0));