这应该相对容易些,但是我显然很难找到正确的语法。
这就是我正在缩小的内容
$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
我想做的是在查询中排除任何a
或href
链接元素,以便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)]');
这些都不起作用。
我的查询需要什么才能排除结果中的任何链接元素?
答案 0 :(得分:0)
您可以使用以下方法从结果中排除链接文本节点
//div[@class="intro"]//text()[not(parent::a)]
或
string-join(//div[@class="intro"]//text()[not(parent::a)], " ")