通过php中的属性值获取HTML元素
Posted
技术标签:
【中文标题】通过php中的属性值获取HTML元素【英文标题】:get HTML element by attribute value in php 【发布时间】:2012-01-13 19:06:15 【问题描述】:我需要使用 php 从网页中提取一些数据。我感兴趣的部分的结构与此类似:
<a href="somepath" target="fruit">apple</a>
<a href="somepath" target="animal">cat</a>
<a href="somepath" target="fruit">orange</a>
<a href="somepath" target="animal">dog</a>
<a href="somepath" target="fruit">mango</a>
<a href="somepath" target="animal">monkey</a>
首先,我想提取所有水果,然后是所有动物,以便将它们很好地分组。
我想出了如何遍历所有属性值。代码如下:
$dom = new DOMDocument();
$html = file_get_contents('example.html');
@$dom->loadHTML($html);
$a = $dom->getElementsByTagName('a');
for ($i; $i < $a->length; $i++)
$attr = $a->item($i)->getAttribute('target');
echo $attr . "\n";
所以我得到:
fruit animal fruit animal fruit animal
我还发现了如何获取元素的文本内容:
$a->item($i)->textContent
所以,如果包含在循环中并回显,我会得到:
apple cat orange dog mango monkey
我觉得我很接近,但我无法得到我想要的。我需要这样的东西:
if (target = "fruit") then give me "apple, orange, mango".
有人可以指点我正确的方向吗?
谢谢。
【问题讨论】:
【参考方案1】:只需 target
属性上不是 fruit
的 continue
,然后将元素的 textContent
添加到数组中。
$nodes = array();
for ($i; $i < $a->length; $i++)
$attr = $a->item($i)->getAttribute('target');
if ($attr != 'fruit')
continue;
$nodes[] = $a->item($i)->textContent;
$nodes
现在包含将其target
属性设置为fruit
的元素的所有节点。
【讨论】:
【参考方案2】:使用DOMXPath
和查询:
$doc = new DOMDocument();
$doc->Load('yourFile.html');
$xpath = new DOMXPath($doc);
$fruits = $xpath->query("//a[@target='fruit']");
foreach($fruits as $fruit)
// ...
$animals = $xpath->query("//a[@target='animal']");
foreach($animals as $animal)
// ...
参见this 演示。
【讨论】:
【参考方案3】:制作两个数组
$fruits=array();
$animals=array();
t 并在你得到时循环。
if(target=='fruit')
array_push($fruits,$valueofelement);
else if ($target=='animal')
array_push($animals,$valueofelement);
【讨论】:
以上是关于通过php中的属性值获取HTML元素的主要内容,如果未能解决你的问题,请参考以下文章