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

标签 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>

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

最佳答案

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

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;
    }
}

已更新

另外,正如评论中所建议的那样,我们可以像这样使用 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";
 }

关于Php SimpleXML 在父级的任何级别找到特定的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40363358/

相关文章:

jquery - 删除任何具有 img 子级的段落标签,但不删除 img

php - 无法确定扩展和插件的默认 Controller TYPO3 中的错误

php - 检查文件夹是否为空 php

java - "Fatal Error"以下 nutch 教程 "markup in the document following the root must be well formed"

java - 读取复杂的 XML Java

ruby - Nokogiri 的 xml 输出上的命名空间

php - password_hash 等同于 php 5.4?

php - 按值获取 stdClass 对象

javascript - 道场:如何克隆小部件?

javascript - 合并两个 html 表单中的数据元素无法正常工作