xpath只抓取标记内的HTML注释

时间:2012-07-19 18:18:26

标签: php html xpath curl comments

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

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

我将我的xpath查询指向// html / body,它只返回“在这里注释”而没有别的。

我非常困惑,从未见过这样的事 - 任何想法?

编辑:这是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;

2 个答案:

答案 0 :(得分:2)

您错误地保存了节点:

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

你原来的问题是:

$out = $node->nodeValue;

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

答案 1 :(得分:0)

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

对于下面输入的xml片段

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

XPath看起来像

/html/body/comment()

这应该会提取您的文字comment here。 有关更多信息,请参阅this