PHP DOM解析以获取特定div id内的元素
我有一些html,如下所示:PHP DOM解析以获取特定div id内的元素,php,parsing,dom,Php,Parsing,Dom,我有一些html,如下所示: <div id="tvcap"> <div class="c" id="tads"> <ol> <li> <div class="vsc vsta"> <h3> <a id="pa1" href="">
<div id="tvcap">
<div class="c" id="tads">
<ol>
<li>
<div class="vsc vsta">
<h3>
<a id="pa1" href="">
</a>
<a id="vpa1" href="http://www.link1.com">
Link 1 Text 1</a>
</h3>
<div>
<div class="kv kva">
<cite>
www.link1.com</cite>
</div>
</div>
<span class="ac">Link 1 Text2</span>
</div>
</li>
<li>
<div class="vsc vsta">
<h3>
<a id="pa2" href="">
</a>
<a id="vpa2" href="http://www.link2.com">Link 2 Text 1</a>
</h3>
<div>
<div class="kv kva">
<cite>www.link2.com</cite>
</div>
</div>
<span class="ac">Link 2 Text 3</span>
<div>
<div class="oslk">
</div>
</div>
</div>
</li>
</ol>
</div>
</div>
www.link1.com
链接1文本2
www.link2.com
链接2文本3
可能会有一个未知数量的链接和文本,我希望迭代,并能够得到每个链接和文本
我在用电脑
我找不到获取div id“vpa1”的命令
我尝试了这个,但它没有返回任何结果:
foreach($html->find('a') as $element)
if ($element->id == "vpa1") echo $element->href . '<br>';
foreach($html->find('a')as$element)
如果($element->id==“vpa1”)回显$element->href
';
如何根据id为vpa[$I](vpa1、vpa2等)访问每个链接和文本。正如@Wrikken所说,Xpath不会很快,而是简单的解决方案 以下代码可作为起点:
$some_html=file_get_contents('some_html.html');//我把你的html放进了一些html.html文件
$doc=新的DOMDocument();
$doc->loadHtml($some_html);//$一些html应该包含您的html字符串
$xpath=新的DOMXPath($doc);
//没有bug的进程
$result=$xpath->query('/*[@id=“vpa1”]');
var_dump($结果);
如果(!empty($result)){
foreach($result as$link){
变量转储($link->nodeValue);
}
}
//输出
//object(DOMNodeList)#4(1){[“length”]=>int(1)}字符串(38)“Link 1 Text 1”
$result=$xpath->query('//a');
var_dump($结果);
如果(!empty($result)){
foreach($result as$link){
变量转储($link->nodeValue);
}
}
//输出
//object(DOMNodeList)#8(1){[“length”]=>int(4)}string(25)”“string(38)”Link 1 Text 1“string(17)”“string(13)”Link 2 Text 1
正如@Wrikken所说,Xpath不会很快,而是简单的解决方案
以下代码可作为起点:
$some_html=file_get_contents('some_html.html');//我把你的html放进了一些html.html文件
$doc=新的DOMDocument();
$doc->loadHtml($some_html);//$一些html应该包含您的html字符串
$xpath=新的DOMXPath($doc);
//没有bug的进程
$result=$xpath->query('/*[@id=“vpa1”]');
var_dump($结果);
如果(!empty($result)){
foreach($result as$link){
变量转储($link->nodeValue);
}
}
//输出
//object(DOMNodeList)#4(1){[“length”]=>int(1)}字符串(38)“Link 1 Text 1”
$result=$xpath->query('//a');
var_dump($结果);
如果(!empty($result)){
foreach($result as$link){
变量转储($link->nodeValue);
}
}
//输出
//object(DOMNodeList)#8(1){[“length”]=>int(4)}string(25)”“string(38)”Link 1 Text 1“string(17)”“string(13)”Link 2 Text 1
对我有效的方法是首先使用以下命令(使用以下命令)找到具有指定id字符串的div:
然后使用div变量访问内部的更多内容。对我有效的方法是首先使用以下命令(使用以下命令)找到具有指定id字符串的div:
然后使用div变量访问更多内容。函数从任何网页的特定div id提取内容 下面的函数从指定的div中提取内容并返回它。如果找不到ID为的div,则返回false
function getHTMLByID($id, $html) {
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$node = $dom->getElementById($id);
if ($node) {
return $dom->saveXML($node);
}
return FALSE;
}
$id
是您试图提取其内容的
的id,$html
是您的html标记
用法示例:
$html = file_get_contents('http://www.mysql.com/');
echo getHTMLByID('tagline', $html);
输出:
世界上最流行的开源数据库
从任何网页提取特定div id的内容的函数
下面的函数从指定的div中提取内容并返回它。如果找不到ID为的div,则返回false
function getHTMLByID($id, $html) {
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$node = $dom->getElementById($id);
if ($node) {
return $dom->saveXML($node);
}
return FALSE;
}
$id
是您试图提取其内容的
的id,$html
是您的html标记
用法示例:
$html = file_get_contents('http://www.mysql.com/');
echo getHTMLByID('tagline', $html);
输出:
世界上最流行的开源数据库
如果您知道XPath
。。。事情变得更简单了。DOM
中的实际快速nuilt具有xpath
功能。我现在不知道这个“简单html dom解析器”是否有…@Wrikken您如何使用XPath?(我不必使用简单的HTMLDOM解析器)$xpath->query(//a[以(@id,'vpa')开头])例如,代码>取决于html的其余部分。。。事情变得更简单了。DOM
中的实际快速nuilt具有xpath
功能。我现在不知道这个“简单html dom解析器”是否有…@Wrikken您如何使用XPath?(我不必使用简单的HTMLDOM解析器)$xpath->query(//a[以(@id,'vpa')开头])例如,代码>取决于html的其余部分。感谢您的帮助。由于某些原因,命令“$result=$xpath->query('/*[@id=“vpa1”]”)不起作用。T