DOMXPath объединение извлечения с PHP
Я пытаюсь получить img
и div
который идет после div
который содержит это img
, все в одном запросе. Итак, я сделал это:
$nodes = $xpath->query('//div[starts-with(@id, "someid")]/img |
//div[starts-with(@id, "someid")]/following-sibling::div[@class="spec_class"][1]/text()');
Теперь я могу получить атрибуты img
тег, но я не могу получить текст следующего брата. Если я разделить запрос (два запроса - первый для img
и второй запрос для родного брата) это работает. Но как я могу сделать это только с одним запросом? Кстати, в синтаксисе нет ошибок. Но почему-то профсоюз не работает, или, может быть, я неправильно извлекаю информацию о родном брате.
Вот разметка (которая повторяется много раз с другим текстом и id="someid_%randomNumber%
)
<div id="someid_1">
<img src="link_to_image.png" />
...some text...
</div>
<div>...another text...</div>
<div class="spec_class">
...Important text...
</div>
Я хочу получить в одном запросе и link_to_image.png и ... Важный текст...
1 ответ
Ваш запрос кажется правильным.
Пример XML:
<div>
<div id="someid-1"><img src="foo"/></div>
<div class="spec_class">bar</div>
<div class="spec_class">baz</div>
</div>
Пример PHP-кода:
$dom = new DOMDocument;
$dom->loadXml($xhtml);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//div…') as $node) {
echo $dom->saveXML($node);
}
Выходы ( демо):
<img src="foo"/>bar
Обратите внимание, что вам придется перебирать DOMNodeList, возвращаемый запросом XPath.