【发布时间】:2011-08-21 05:14:09
【问题描述】:
我正在尝试对 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>
我正在做的是这样的:
$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
}
}
在$xpath->query('/div[@class=link], $entry); 之前一切正常。我不知道如何在特定的 DOMElement ($entry) 上使用 Xpath。
如何在 DOMElement 上使用 xpath 查询?
【问题讨论】:
-
除非您提供评估这些 XPath 表达式的 XML 文档(尽可能小),否则无法给出一个好的答案(猜测除外)。您可能有一个默认命名空间,这可以解释结果。另外,请注意
//div.link是一个absolute XPath 表达式,而您想针对每个$entry评估一个relative XPath 表达式。所以,宁愿是:.//div.link -
我假设您的 HTML 是 XHTML 并且完全有效的 XHTML?
-
@Orbling:不用了,他用的是
loadHTML方法。 -
@Jon:好吧,如果有无效位,它仍然会生成一批警告。
-
@Dimitre:停止从您不喜欢的问题中删除 xpath 标签。