php - 如何解析部分 HTML?

标签 php html dom parsing

我正在尝试在 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 with DOMDocument::validate or DOMDocument->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/

相关文章:

html - 在 slider 顶部显示元素的问题

javascript - 可能的 Safari 错误?修复了相对 div 内的 div 没有动画

javascript - hasOwnProperty 在 FF 中返回 false

php - 使用php从文本中提取单词

html - 如何删除水平滚动条 CSS3

javascript - 当我的网址有?标记 event.preventDefault() 或 return false 不适用于表单提交事件

javascript - 如何将事件监听器附加到本身已使用 Javascript 插入的元素? (没有 jQuery)

php - 在主要受限用户而不是 www-data 下运行 PHP 安全吗?

php - 如何使用 codeigniter 更正发送电子邮件的方式

php - 如何让用户注册后自动登录