我试图修改一个XML文档,其中包含一些我可以通过名称识别的节点。例如,我可能想要修改文档中的<abc>some text</abc>
节点(我可以通过标记名abc
识别)
我目前面临的问题是我不知道这份文件的确切结构。我不知道调用了根元素是什么,我也不知道哪些孩子可能包含这个<abc>
节点。
我尝试使用SimpleXML<...>
,但这不允许我读取任意元素子元素:
$xml = new SimpleXMLElement($xmlString);
foreach ($xml->children() as $child) {
// code here doesnt execute
}
我正在考虑构建我自己的XML解析器,它具有这个简单的功能,但我不能相信简单地迭代一个节点的所有子节点(最终递归)不是PHP支持的东西。希望有人可以告诉我我失踪了什么。谢谢!
答案 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
感谢您的帮助。