【问题标题】:Excluding Links in Xpath Query在 Xpath 查询中排除链接
【发布时间】:2019-05-23 06:33:59
【问题描述】:

认为这应该相对容易,但我显然无法找到正确的语法。

这是我正在使用的缩小版

$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)]');

这些都不起作用。

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

【问题讨论】:

    标签: php dom xpath


    【解决方案1】:

    您可以使用

    从结果中排除链接文本节点
    //div[@class="intro"]//text()[not(parent::a)]
    

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

    【讨论】:

      猜你喜欢
      • 2012-05-02
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多