获取结构未知的XML节点的子节点

时间:2017-04-28 15:48:53

标签: php xml

我试图修改一个XML文档,其中包含一些我可以通过名称识别的节点。例如,我可能想要修改文档中的<abc>some text</abc>节点(我可以通过标记名abc识别)

我目前面临的问题是我不知道这份文件的确切结构。我不知道调用了根元素是什么,我也不知道哪些孩子可能包含这个<abc>节点。

我尝试使用SimpleXML<...>,但这不允许我读取任意元素子元素:

$xml = new SimpleXMLElement($xmlString);

foreach ($xml->children() as $child) {
    // code here doesnt execute
}

我正在考虑构建我自己的XML解析器,它具有这个简单的功能,但我不能相信简单地迭代一个节点的所有子节点(最终递归)不是PHP支持的东西。希望有人可以告诉我我失踪了什么。谢谢!

2 个答案:

答案 0 :(得分:1)

使用DOMDocument

$dom = new DOMDocument();
@$dom->loadXML($xmlString);     

foreach($dom->getElementsByTagName('item') as $item) { 

    if ($item->hasChildNodes()) {

        foreach($item->childNodes as $i) {

            YOUR CODE HERE
        }

    }
}

答案 1 :(得分:0)

我在发布之后发现了解决方案,之后被卡住了一段时间......

SimpleXML<...>没有这些功能,但DOMDocument和相关联的类有;

$dom = new DOMDocument();
$dom->loadXml($xmlString);

foreach($dom->childNodes as $child) {
    if ($child->nodeName == "abc") {
        $child->textContent = "modified text content";
    }
}

以下参考文档:http://php.net/manual/en/book.dom.php

感谢您的帮助。