【发布时间】:2012-06-11 06:56:38
【问题描述】:
我有一个函数可以将一个无值元素和一堆带值的子元素添加到一个 xml 文件中,所以我写它来接受两个参数 $tag(String the parent node) 和 $hash(Array $elm=> $elm_value)
function addUser($tag, $hash)
{
$dom = new DOMDocuemnt();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load('file');
$parent = $dom->createElement($tag);
foreach($hash as $elm => $value){
$n = $dom->createElement($elm, $value);
$parent->appendChild($n);
}
$dom->appendChild($parent);
$dom->save('file');
return $dom->saveXML();
}
唯一的问题是$dom->appendChild($parent) 在根元素的结束标记之后附加所有内容,从而弄乱了我的 xml 文件。所以我尝试了$dom->insertBefore($parent),结果相同。所以我尝试了$xpath = new DOMXPath($dom); $root = $xpath->query('/')->item(0); $root->appendChild($parent);。结果相同。然后我尝试使用$dom->getElementsByTagName(name of root)->item(0); 选择根元素,当它真正起作用时我感到很惊讶!但是如果我不知道标签名称怎么办?是否有另一种选择根元素的方法,以便调用 appendChild 或 inserBefore 将元素添加到根结束标记之前而不是之后?
【问题讨论】:
标签: php xml domdocument appendchild