【问题标题】:Can not get Xpath to fetch a nodeList [duplicate]无法让 Xpath 获取节点列表 [重复]
【发布时间】:2013-04-23 05:19:06
【问题描述】:
libxml_use_internal_errors(true);
$url = 'http://thepiratebay.is/browse/200/0/7';
$html = file_get_contents($url);
$dom = new \DOMDocument();
$dom->loadHTML($html);
$x = new \DOMXPath($dom);
$nodeList = $x->query('/html/body/div[2]/div[2]/table/tbody/tr');
foreach ($nodeList as $node) {
    die(var_dump($node));
}

给我错误:

"Invalid argument supplied for foreach()"

不确定为什么 xpath 在该域上不起作用?

【问题讨论】:

  • 您是否 var_dumped $html 的内容只是为了确保您的 XPath 查询与您正在获取的内容的结构相对应?
  • 我在页面源代码的任何地方都找不到tbody...
  • @Havelock +1。如果错误是因为没有看到解析的内容,那么将有问题的内容也粘贴为问题的一部分(至少是相关部分,以防它是一个巨大的数据 - 或也许在一些在线 HTML pastebin 中)
  • @Raidenace OP 提供了 URL... 鼠标右键 -> 显示页面源(在 FF 中)
  • @Havelock - 许多系统不允许访问 torrent 站点..

标签: php xpath


【解决方案1】:

如果我是对的,您希望获得该表中的所有标题。我建议使用更简单但更具体的 XPath 查询,即

$nodeList = $x->query('//div[@class="detName"]');

See it in action

【讨论】:

  • 我使用了 firebug 的 'copy xpath' 来获取 xpath。你有没有机会知道为什么这不起作用?我现在去研究 xpath 来手动编写它:p
  • @Tjorriemorrie,老实说,我无法告诉你为什么 Firebug 没有做对。但在我看来,在使用工具帮助您时,没有什么比了解事物的背景更重要的了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多