PHP XPath通配符搜索


PHP XPath wild card search

我想检索HTML中div元素中的所有内容。我使用PHP和XPath来完成这项工作

$doc = new DOMDocument();
$doc->loadHTMLFile($uri);
$xpath= new DOMXPath($doc);
$text_content =
$xpath->query("/html/body/div[5]/div[1]/div[1]/div[1]/div[2]/div[5]/*");

我使用通配符"*"来检索这个div(div[5])下的所有元素(普通文本、div、img、p等),但当我打印$text_content时,我发现它只存储了所有div元素。

正确的方法是什么?

提前谢谢。

.../*将只在xpath查询中检索作为该文件div[5]的直接子代的节点。例如

 ... rest of document ...
     <div id="5">
        <p>hello <span>there</span></p>
     </div>

在这个简化的示例中,您的查询将检索<p>,因为它是<div>的直接后裔。它不会带回<span>,因为它是<div> 的孙子

要获得所有后代,无论级别如何,您都需要

.../div[5]//*
          ^^---note doubled slashes

///descendant-or-self::node()/的短手,将返回跨度。