在Xpath查询中排除链接

时间:2018-12-23 22:25:47

标签: php dom xpath

这应该相对容易些,但是我显然很难找到正确的语法。

这就是我正在缩小的内容

$dom = new DOMDocument();
libxml_use_internal_errors(true);

$dom->LoadHTML('<div class="intro"><div class="special"><span class="point"><span class="us">US </span><span>20.00</span></span> per <p class="original"><span class="us">US</span> 7.50 <a href="test.html">Link</a></p></div></div>');

$xp = new DOMXPath($dom);

$path = $xp->query('//div[@class="intro"]');

foreach($path as $p)
{
echo '<pre>';
print_r($p);
echo '</pre>';
}

这带回了

[nodeValue] => US 20.00 per US 7.50 Link

我想做的是在查询中排除任何ahref链接元素,以便nodeValue可以简单地带回

[nodeValue] => US 20.00 per US 7.50

以下是我在xpath查询中为达到此目的而尝试过的一些方法:

$path = $xp->query('//div[@class="intro" and not(@href)]');
$path = $xp->query('//div[@class="intro" and not(a)]');
$path = $xp->query('//div[@class="intro"][not(a)]');
$path = $xp->query('//div[@class="intro"][not(@href)]');
$path = $xp->query('//div[@class="intro"][not(self::a)]');

这些都不起作用。

我的查询需要什么才能排除结果中的任何链接元素?

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法从结果中排除链接文本节点

//div[@class="intro"]//text()[not(parent::a)]

string-join(//div[@class="intro"]//text()[not(parent::a)], " ")