Ваш вопрос немного недописан, поэтому существует несколько способов его интерпретации. Если вы хотите, чтобы все прямые элементы дочерних текущего элемента (со всеми их подэлементам), а затем использовать
*/*
Для примера, это дает вам
<span>
<cite>
</cite>
</span>
и
<span>
<cite>
</cite>
</span>
Если вы хотите всех детей узлов, тогда используйте node()
вместо *
:
*/node()
Для вашего примера это дает вам оба подэлемента, как указано выше, наряду с узлами новой строки/отступов text()
.
Если вы хотите, чтобы только дочерние узлы, а не их дети (т.только span
элементы, но без их дочерних элементов), необходимо использовать два выражения:
- выбрать элементы прямого потомка с помощью
*/*
- процесса в те дочерние элементы и выбирать только текстовые узлы, а не элементы внуков через
text()
Мой PHP немного ржавый, но он должен работать как-нибудь так:
$doc = new DOMDocument;
// set up $doc
$xpath = new DOMXPath($doc);
// perform step #1
$childElements = $xpath->query('*/*');
$directChildren = array();
foreach ($childElements as $child) {
// perform step #2
$textChildren = $xpath->query('text()', $child);
foreach ($textChildren as $text) {
$directChildren[] = $text;
}
}
// now, $directChildren contains all text nodes
Спасибо за предложение ребенка :: axis. Это должен быть принятый ответ. – Eternal21