我正在使用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
?>
DOMXPath :: query
(或添加整个文档,并查询/a [1] /b
)。 - WrikkenDOMReader
及其方法expand()
逐块解析它们。不幸的是,副作用是我没有DOMDocument
,只有许多DOMElement
实例,我无法优雅地为它们构建DOMXPAth
...为什么一切都考虑得这么糟糕!?!我想避免再次将DOMElment
转换为SimpleXML
,但我越来越接近做出这个决定... - Kalmar