2013-04-29 246 views
1
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)); 
} 

给我的错误:无法获取XPath来获取一个节点列表

"Invalid argument supplied for foreach()" 

不知道为什么XPath不上该领域工作?

+1

你有'var_dump'ed的'$ html'内容只是为了确保您的XPath查询对应的结构你在提取什么? – Havelock 2013-04-29 14:01:56

+1

我无法在页面的任何位置找到“tbody”... – Havelock 2013-04-29 14:04:35

+1

@Havelock +1。如果错误是因为没有看到解析的内容,那么将所讨论的内容也作为问题的一部分粘贴是非常有用的(至少是相关部分,以防万一它是一个巨大的数据,或者也许在一些在线的HTML pastebin) – raidenace 2013-04-29 14:05:43

回答

1

如果我是对的,你想获得该表中的所有标题。我建议一个更简单的,更具体的XPath查询,即

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

See it in action

+0

我用firebug的'copy xpath'来获取xpath。你有没有机会知道为什么这不起作用?我现在要去学习xpath以手动编写它:p – Tjorriemorrie 2013-04-30 07:13:30

+0

@Tjorriemorrie,说实话,我不能告诉你为什么Firebug没有正确的编写它。但在我看来,在使用工具来帮助你时,没有什么能够知道事情的背景。 – Havelock 2013-05-01 07:46:52