我正在尝试在 PHP 中使用 DOM 解析一些 HTML,但我遇到了一些问题。首先,如果这改变了解决方案,我拥有的 HTML 不是完整页面,而是它的一部分。
<!-- This is the HTML that I have --><a href='/games/'>
<div id='game'>
<img src='http://images.example.com/games.gif' width='300' height='137' border='0'>
<br><b> Game </b>
</div>
<div id='double'>
<img src='http://images.example.com/double.gif' width='300' height='27' border='0' alt='' title=''>
</div>
</a>
现在我试图只获取 ID 为 double
的 div。我尝试了以下代码,但它似乎无法正常工作。我可能做错了什么?
//The HTML has been loaded into the variable $html
$dom=new domDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$keepme = $dom->getElementById('double');
$contents = '<div style="text-align:center">'.$keepme.'</a></div>';
echo $contents;
最佳答案
我认为 DOMDocument::getElementById
不适用于您的情况:(引用)
For this function to work, you will need either to set some ID attributes with
DOMElement::setIdAttribute
or a DTD which defines an attribute to be of type ID.
In the later case, you will need to validate your document withDOMDocument::validate
orDOMDocument->validateOnParse
before using this function.
一个可能有效的解决方案是使用一些 XPath query提取您要查找的元素。
首先,让我们加载 HTML 部分,就像您第一次做的那样:
$dom=new domDocument;
$dom->loadHTML($html);
var_dump($dom->saveHTML());
var_dump
此处只是为了证明 HTML 部分已成功加载——从其输出来看,它已成功加载。
然后,实例化 DOMXPath
类,并使用它来查询要获取的元素:
$xpath = new DOMXpath($dom);
$result = $xpath->query("//*[@id = 'double']");
$keepme = $result->item(0);
我们现在必须添加您想要的元素 ;-)
但是,为了将它的 HTML 内容注入(inject)到另一个 HTML 段中,我们必须首先获取它的 HTML 内容。
我不记得有什么“简单”的方法可以做到这一点,但是像这样的东西可以解决问题:
$tempDom = new DOMDocument();
$tempImported = $tempDom->importNode($keepme, true);
$tempDom->appendChild($tempImported);
$newHtml = $tempDom->saveHTML();
var_dump($newHtml);
还有...我们有您的 double
的 HTML 内容<div>
:
string '<div id="double">
<img src="http://images.example.com/double.gif" width="300" height="27" border="0" alt="" title="">
</div>
' (length=125)
现在,你只需要用它做任何你想做的事 ;-)
关于php - 如何解析部分 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933631/