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