繁体   English   中英

PHP Xpath:在HTML代码段中匹配根节点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM