1

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

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

我将我的 xpath 查询指向 //html/body,它只会返回“comment here”,没有别的。

我很困惑,从来没有见过这样的事情——有什么想法吗?

编辑:这是 curl 登录后的我的 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;
4

2 回答 2

2

您错误地保存了节点:

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

你原来的问题是这样的:

$out = $node->nodeValue;

$out每次迭代中不断被覆盖的地方,所以你只会得到最后一个值。上面的解决方案不断地连接节点的值,所以你会得到所有的。

于 2012-07-19T20:27:09.943 回答
0

XPath 2.0 提供comment()了访问 XML 文件中的注释的功能。只需将此函数附加到您要从中获取评论的节点。

对于以下输入 xml 片段

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

XPath 看起来像

/html/body/comment()

这应该获取您的文本comment here。有关更多信息,请参阅

于 2012-07-20T10:18:07.560 回答