Php SimpleXML 在父级中的任何级别查找特定子节点

Ann*_*nna 7 php xml dom simplexml

我正在使用 SimpleXML 来解析我的 xml 文件。我正在循环遍历它,在每个节点中我需要获取一个特定标签的值。这是一个例子

<node>
    <child1></child1>
    <findme></findme>
    <child2></child2>
</node>
<node>
    <child1>
        <findme></findme>
    </child1>
    <child2></child2>
</node>
<node>
    <child1></child1>
    <child2>
      <another>
            <findme></findme>
      </another>
    </child2>
</node>
Run Code Online (Sandbox Code Playgroud)

在每个节点中我需要获取findme标签。但我不知道它能达到哪个级别,我只知道一个标记名

Ann*_*nna 5

我想到的唯一决定是使用这个递归函数

foreach($xml as $prod){
  ...
  $findme = getNode($prod, 'fabric');
  ...
}

function getNode($obj, $node) {
    if($obj->getName() == $node) { 
        return $obj;
    }
    foreach ($obj->children() as $child) {
        $findme = getNode($child, $node);
        if($findme) return $findme;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新

另外,正如评论中所建议的,我们可以使用 DOMDocument 类,如下所示:

 $dom = new DOMDocument();
 $dom->LoadXML($xmlStr);
 $nodes = $dom->getElementsByTagName('node');

 foreach($nodes as $node)
 { 
    $findme = $node->getElementsByTagName("findme")->item(0);
    echo $findme->textContent."\r";
 }
Run Code Online (Sandbox Code Playgroud)