使用xpath通过在xpath查询中引入祖先来提取数据

时间:2012-01-26 23:35:04

标签: php regex arrays xpath domdocument

我正在使用以下代码

$doc = new DOMDocument();
$doc->strictErrorChecking = false;
@$doc->loadHTML($data);
  $xpath = new DOMXPath($doc);
 //Select the parent node
$categories =$xpath->query('//span[@class="refinementLink"]/ancestor::a/li/ul');
$abcd=array();
var_dump($categories);
foreach ($categories as $category) {


    $abcd[]=$category->nodeValue; 
      print_r('<br/>'.$abcd);
    // Crafts, Hobbies & Home (19)
}` //var_dump($abcd);

现在,这段代码做了什么?它选择一个span标签,span标签的dom列表是

  

UL - 李(4) - A(2) - 跨度(3)

输出

  

对象(的DOMNodeList)[3]

看起来我正在做的事情好吧,我的html文档中有3个span标签, 我需要的是,我如何获得这些span标签的文本?我需要span标签之间的文本 有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

->textContent

foreach ($categories as $category) {
    $abcd[]=$category->textContent; 
}
var_dump($abcd);

答案 1 :(得分:0)

我认为你可以在开始执行XPath查询时拉开@attribute。 XPath中的谓词为您处理foreach。

我使用Oxygen IDE中的XML开发人员,它可以很好地显示XPath从XML中解析出来的内容,这样您就可以更加确定会发生什么。

//跨度/ @文本[../@类= “refinementLink”] /祖先:: A / LI / UL 我不确定文本是否是您的目标文本的属性,但在XPath中,无论在[]之前是什么,都是关于您想要选择的内容。您选择它作为节点,因此您必须在那里做额外的工作。如果你取出一系列字符串,你可能会得到别的东西。我自己从未尝试过,只是提供另一种思路。