有没有一种方法只能检索通过调用DOMElement::getElementsByTagName找到的直接子级?例如,我有一个具有category元素的XML文档。该类别元素具有子类别元素(具有相同的结构),例如:

<category>
    <id>1</id>
    <name>Top Level Category Name</name>
    <subCategory>
        <id>2</id>
        <name>Sub Category Name</name>
    </subCategory>
    ...
</category>

如果我有一个表示顶级类别的DOMElement,
$topLevelCategoryElement->getElementsByTagName('id');

将返回一个列表,其中包含所有“id”元素的节点,在这里,我只想从顶层开始。除了使用XPath之外,还有其他方法吗?

最佳答案

恐怕不是。您必须遍历子级或使用XPath。

for ($n = $parent->firstChild; $n !== null; $n = $n->nextSibling) {
    if ($n instanceof DOMElement && $n->tagName == "xxx") {
        //...
    }
}

XPath和您的XML文件的示例:
$xml = ...;
$d = new DOMDocument();
$d->loadXML($xml);
$cat = $d->getElementsByTagName("subCategory")->item(0);
$xp = new DOMXpath($d);
$q = $xp->query("id", $cat); //note the second argument
echo $q->item(0)->textContent;

给出2

关于PHP DOMElement::getElementsByTagName-是否只获得直接匹配的子代?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3049648/

10-09 00:05