假设我有以下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>发布于 2014-03-18 16:15:32
通过使用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>';输出“块代码”:
<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>如果您根本不能接受DOMDocument用doctype、HTML和body“丰富”html,这在您想要完整的文档时会非常烦人,而不仅仅是一些摘录,您可以使用以下方法来use this neat function和提取innerHTML:
echo DOMinnerHTML($doc->getElementsByTagName('body')->item(0));https://stackoverflow.com/questions/22484346
复制相似问题