【问题标题】:xpath only grabbing HTML comment within tagsxpath 只在标签中抓取 HTML 注释
【发布时间】:2012-07-18 23:57:33
【问题描述】:

我有一个登录网站的 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;

【问题讨论】:

  • 你需要展示你的 PHP 代码。

标签: php html xpath curl comments


【解决方案1】:

您错误地保存了节点:

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

你原来的问题是这样的:

$out = $node->nodeValue;

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

【讨论】:

    【解决方案2】:

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

    对于下面的输入xml片段

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

    XPath 看起来像

    /html/body/comment()
    

    这应该会为您获取文本comment here。 更多信息请参考this

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2017-03-29
      • 2010-11-22
      • 2015-12-19
      • 1970-01-01
      • 2016-04-13
      • 2013-09-30
      • 2013-10-03
      • 1970-01-01
      相关资源
      最近更新 更多