Max*_*Max 7 php xpath dom element
我正在尝试在DOMElements上进行Xpath查询,但它似乎不起作用.这是代码
<html>
<div class="test aaa">
<div></div>
<div class="link">contains a link</div>
<div></div>
</div>
<div class="test bbb">
<div></div>
<div></div>
<div class="link">contains a link</div>
</div>
</html>
Run Code Online (Sandbox Code Playgroud)
我正在做的是这样的:
$dom = new DOMDocument();
$html = file_get_contents("file.html");
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$entries = $xpath->query("//div[contains(@class,'test')]");
if (!$entries->length > 0) {
echo "Nothing\n";
} else {
foreach ($entries as $entry) {
$link = $xpath->query('/div[@class=link]',$entry);
echo $link->item(0)->nodeValue;
// => PHP Notice: Trying to get property of non-object
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好$xpath->query('/div[@class=link], $entry);.我不知道如何在特定的DOMElement($ entry)上使用Xpath.
如何在DOMElement上使用xpath查询?
看起来你正在尝试将CSS选择器与XPath混合使用.您希望使用谓词([...])查看class属性的值.
例如,你//div.link可能看起来像//div[contains(concat(' ',normalize-space(@class),' '),' link ')].
其次,在循环中,您尝试使用上下文节点进行查询,然后通过使用绝对位置路径(以斜杠开头)忽略它.
已更新以反映对问题的更改:
你的第二个XPath表达式(/div[@class=link])仍然是a)绝对的,而b)的条件不正确.要被询问匹配相对于指定的上下文节点(元素$entry与所述)class具有属性字符串值的link.
所以/div[@class=link]应该变成像div[@class="link"]搜索$entry元素的孩子一样(使用.//div[...]或者descendant::div[...]如果你想更深入地搜索).
| 归档时间: |
|
| 查看次数: |
6142 次 |
| 最近记录: |