Xpath - 从div中的所有h1,h3 p标签中获取文本

时间:2013-12-04 23:01:02

标签: php dom html xpath

我目前正在使用以下查询提取<h1> <p><h3>代码中的文字。

$xpath->query("//div[contains(concat(' ', normalize-space(@class), ' '), ' grid_9 alpha omega newscontainer arena ')]/h1");
$xpath->query("//div[contains(concat(' ', normalize-space(@class), ' '), ' grid_9 alpha omega newscontainer arena ')]/p");
$xpath->query("//div[contains(concat(' ', normalize-space(@class), ' '), ' grid_9 alpha omega newscontainer arena ')]/h3");

他们确实有时会有不同的顺序,所以我想按照html中的顺序捕捉它们。我确实使用了

$xpath->query('//h1 | //p | //h3');

并且效果很好,但也在上面指定的div类之外捕获了一些<p>标记。按顺序使用它们根本不起作用。有没有办法将这些查询合并为一个?

基本上提取特定div类中的所有h1,p和h3标签?

2 个答案:

答案 0 :(得分:0)

为什么不试试

$xpath->query("//div[contains(concat(' ', normalize-space(@class), ' '), ' grid_9 alpha omega newscontainer arena ')]/*[local-name()='h1' or local-name()='p' or local-name()='h3']");

这应该给出节点的外观顺序仅限于div父节点的子节点以及XPath 1.0中的节点,我认为这是未提及的先决条件。

答案 1 :(得分:0)

使用时//将匹配任何具有此标记名的元素

你必须更具体,我建议你

$xpath->query('//div/h1 | //div/p | //div/h3');