2012-07-19 45 views
1

我有一个php脚本登录到一个网站,然后我试图运行一个xpath查询来获取某个标签。如果我在本地保存页面并运行xpath,那么一切都很好;但是,当我登录到网站并运行xpath时,它只会返回标记底部的html注释。所以 - 如果我有:xpath只在标签内抓取HTML注释

<html> 
    <body> 
     something here 
     <!--comment here--> 
    </body> 
</html> 

我点我的XPath查询时// HTML /体,只会返回“的评论在这里”,别无其他。

我很困惑,从来没有见过这样的东西 - 任何想法?

编辑:这里的卷曲登录后我的PHP(这是成功的) - 这是相当标准:

$file = REDACTED; 
$doc = new DOMDocument(); 
$doc->loadHTMLFile($file); 
$xpath = new DOMXpath($doc); 
$elements = $xpath->query("//html/body/div[1]"); 

if (!is_null($elements)) { 
    foreach ($elements as $element) { 
    $nodes = $element->childNodes; 
    foreach ($nodes as $node) { 
     $out = $node->nodeValue; 
    } 
    } 
} 

echo $out; 
+0

你需要显示你的PHP代码。 – nickb 2012-07-19 18:18:56

+0

我编辑了原帖! – user453289 2012-07-19 20:24:11

回答

1

你错误地保存您的节点:

$out = ''; 
foreach ($elements as $element) { 
    foreach ($element->childNodes as $node) { 
     $out .= $doc->saveHTML($node); 
    } 
} 

你原来的问题是这样的:

$out = $node->nodeValue; 

其中$out在每次迭代中都被覆盖,所以哟你只会得到最后的价值。上面的解决方案连续地连接节点的值,所以你会得到所有的。

0

XPath 2.0提供comment()函数用于访问XML文件中的注释。只需将此函数附加到要从中提取注释的节点即可。

对于下面输入XML片段

<html> 
    <body> 
     something here 
     <!--comment here--> 
    </body> 
</html> 

的XPath看起来像

/html/body/comment() 

这应该给你拿文本comment here。 欲了解更多信息,请参阅this