DOMXPath объединение извлечения с PHP - PullRequest
1 голос
/ 06 января 2012

Я пытаюсь получить 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 Ответ

1 голос
/ 06 января 2012

Ваш запрос кажется правильным.

Пример 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);
}

Выходы ( demo ):

<img src="foo"/>bar

Обратите внимание, что вам придется перебирать DOMNodeList, возвращаемый запросом XPath.

...