PHP DOM: Jak uzyskać eleganckie elementy potomne według nazwy tagu?
Parsuję trochę XML z rozszerzeniem PHP DOM w celu przechowywania danych w innej formie. Nic dziwnego, że gdy analizuję element, często muszę uzyskać wszystkie elementy potomne jakiejś nazwy. Jest metodaDOMElement::getElementsByTagName($name)
, ale zwraca wszystkich potomków o tym imieniu, nie tylko bezpośrednich dzieci. Istnieje również nieruchomośćDOMNode::$childNodes
ale (1) zawiera listę węzłów, a nie listę elementów, a nawet jeśli udało mi się zamienić elementy listy w elementy (2), nadal musiałbym sprawdzić wszystkie z nich pod kątem nazwy. Czy naprawdę nie ma eleganckiego rozwiązania, aby uzyskać tylko dzieci o określonej nazwie lub czy czegoś brakuje w dokumentacji?
Pewna ilustracja:
<?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
?>