![](/img/trans.png)
[英]Can't store outerHTML of HTML node into variable using xPath + PHP
[英]PHP Xpath: Matching the root node in an HTML snippet
$document = new \DOMDocument();
\libxml_use_internal_errors(true);
$document->loadHTML('<a/>');
$xpath = new \DOMXPath($document);
echo $xpath->query('/a')->length."\n";
echo $xpath->query('a')->length."\n";
此代码产生两个零,而不是预期的两个1。 为什么,以及什么查询或其他更改(将查询更改为//a
除外)会产生预期的结果?
在路径的开头使用/时:
/一种
...它将定义相对于根的节点“ a”的绝对路径。 这样,在这种情况下,它将仅在XML树的根目录中找到“ a”节点。
在路径的开头使用//时:
//一种
...它将在XML文档中的任何位置定义到节点“ a”的路径。 这样,在这种情况下,它将找到位于XML树内任何深度的“ a”节点。
在标准HTML文档中,根节点是<html>
,然后您有<head>
, <body>
,然后还有其他。 我假设您的<a>
在<body>
的<div>
中
的完整Xpath标识符如下:
/html/body/div/a
这将给您一个单一的结果,以及您要寻找的东西。 但是,这是一个基本的HTML页面,并且可能非常简单。
Xpath使您能够使用//
(双斜线) 跳过 Xpath的各个部分。
/html//a -> any <a> tag in the <html>
//div/a -> any <a> tag that is directly in a <div> that exists anywhere
//a -> any <a> tag anywhere that exists anywhere
因此,通过搜索/a
,您正在HTML文档的开头搜索<a>
标记,实际上并非如此-因此没有结果。
将$document->loadHTML()
更改$document->loadHTML()
$document->loadXML()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.