Исключение ссылок в запросе Xpath - PullRequest
0 голосов
/ 24 декабря 2018

Думаю, это должно быть относительно просто, но у меня, похоже, возникают проблемы с поиском правильного синтаксиса.

Вот то, с чем я работаю: minified

<code>$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 '
';}

Это возвращает

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

Ничего из этого не помогло.

Что нужно для моего запроса, чтобы исключить какие-либо элементы ссылки в результате?

1 Ответ

0 голосов
/ 24 декабря 2018

Вы можете исключить узлы текста ссылки из результатов с помощью

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

или

string-join(//div[@class="intro"]//text()[not(parent::a)], " ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...