wai*_*933 18 html php parsing dom
我正在尝试用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>
Run Code Online (Sandbox Code Playgroud)
现在我试图只获得带有id的div double.我已经尝试了以下代码,但它似乎没有正常工作.我可能做错了什么?
//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;
Run Code Online (Sandbox Code Playgroud)
Pas*_*TIN 13
我想DOMDocument::getElementById在你的情况下不会起作用:( 引用)
要使此功能起作用,您需要使用
DOMElement::setIdAttribute或使用DTD 设置一些ID属性,DTD将属性定义为ID类型.
在后一种情况下,您需要在使用此功能时DOMDocument::validate或DOMDocument->validateOnParse之前验证您的文档.
可能有效的解决方案是使用一些XPath查询来提取您要查找的元素.
首先,让我们像你第一次一样加载HTML部分:
$dom=new domDocument;
$dom->loadHTML($html);
var_dump($dom->saveHTML());
Run Code Online (Sandbox Code Playgroud)
该var_dump只在这里证明HTML部分已成功加载-从它的输出来看,它有.
然后,实例化DOMXPath该类,并使用它来查询您想要获取的元素:
$xpath = new DOMXpath($dom);
$result = $xpath->query("//*[@id = 'double']");
$keepme = $result->item(0);
Run Code Online (Sandbox Code Playgroud)
我们现在必须要你想要的元素;-)
但是,为了将HTML内容注入另一个HTML段,我们必须首先获取其HTML内容.
我不记得任何"简单"的方法,但这样的事情可以做到这一点:
$tempDom = new DOMDocument();
$tempImported = $tempDom->importNode($keepme, true);
$tempDom->appendChild($tempImported);
$newHtml = $tempDom->saveHTML();
var_dump($newHtml);
Run Code Online (Sandbox Code Playgroud)
而且......我们有你的HTML内容double <div>:
string '<div id="double">
<img src="http://images.example.com/double.gif" width="300" height="27" border="0" alt="" title="">
</div>
' (length=125)
Run Code Online (Sandbox Code Playgroud)
现在,你只需要做任何你想做的事情;-)
| 归档时间: |
|
| 查看次数: |
9667 次 |
| 最近记录: |