我需要用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>
Run Code Online (Sandbox Code Playgroud)
首先,我想要提取所有水果,然后提取所有动物,以便我将它们很好地分组.
我想出了如何遍历所有属性值.这是代码:
$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";
}
Run Code Online (Sandbox Code Playgroud)
所以我得到:
fruit animal fruit animal fruit animal
Run Code Online (Sandbox Code Playgroud)
我还发现了如何获取元素的文本内容:
$a->item($i)->textContent
Run Code Online (Sandbox Code Playgroud)
所以,如果包含在循环中并回显,我得到:
apple cat orange dog mango monkey
Run Code Online (Sandbox Code Playgroud)
我觉得我非常接近,但我无法得到我想要的东西.我需要这样的东西:
if(target ="fruit")然后给我"苹果,橘子,芒果".
有人可以指点我正确的方向吗?
谢谢.
ale*_*lex 17
只是continue在target没有的属性上fruit,然后将textContent元素添加到数组中.
$nodes = array();
for ($i; $i < $a->length; $i++) {
$attr = $a->item($i)->getAttribute('target');
if ($attr != 'fruit') {
continue;
}
$nodes[] = $a->item($i)->textContent;
}
Run Code Online (Sandbox Code Playgroud)
$nodes现在包含target属性设置为的元素的所有节点fruit.
far*_*jad 11
使用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) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
看这个演示.