PHP DOM: Как элегантно получить дочерние элементы по имени тега?
Я анализирую некоторые XML с расширением PHP DOM, чтобы сохранить данные в другой форме. Совершенно неудивительно, что когда я анализирую элемент, мне довольно часто требуется получить все дочерние элементы какого-либо имени. Есть методDOMElement::getElementsByTagName($name)
, но он возвращает всех потомков с таким именем, а не только непосредственных детей. Есть также собственностьDOMNode::$childNodes
но (1) он содержит список узлов, а не список элементов, и даже если бы мне удалось превратить элементы списка в элементы (2), мне все равно нужно было бы проверить все их имена. Неужели нет действительно элегантного решения, чтобы получить только детей с каким-то конкретным именем или я что-то упустил в документации?
Некоторая иллюстрация:
<?php
DOMDocument();
$document->loadXML(<<<EndOfXML
<a>
<b>1</b>
<b>2</b>
<c>
<b>3</b>
<b>4</b>
</c>
</a>
EndOfXML
);
$bs = $document
->getElementsByTagName('a')
->item(0)
->getElementsByTagName('b');
foreach($bs as $b){
echo $b->nodeValue . "\n";
}
// Returns:
// 1
// 2
// 3
// 4
// I'd like to obtain only:
// 1
// 2
?>