我正在使用 PHP DOM 扩展解析一些 XML,以便以其他形式存储数据。毫不奇怪,当我解析一个元素时,我经常需要获取某个名称的所有子元素。有方法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
?>