使用DOMdocument在XML文件中追加元素?

时间:2010-03-06 16:53:06

标签: php xml

每当我想创建XML文档时,我都在PHP中使用DOMdocument类。

但是我如何打开XML文档并在XML文档中的现有元素之后添加元素?

它是一个非常庞大的XML文档,所以考虑最有效的方法就可以了。

2 个答案:

答案 0 :(得分:4)

如果您坚持使用DOMdocument,则添加新节点就像获取对现有节点的引用,创建子节点,然后将新节点附加到这些子节点一样简单。我在下面使用过XPath,但任何返回DOMNode的方法都应该有效。要记住的重要部分是即使你已经获取了树的一部分,在内部它也是原始DOMDocument的一部分。

$xml = new DomDocument();
$xml->loadXml('<foo><baz><bar>Node Contents</bar></baz></foo>');    

//grab a node
$xpath = new DOMXPath($xml);    
$results = $xpath->query('/foo/baz');   
$baz_node_of_xml = $results->item(0);

//create a new, free standing node  
$new_node = $xml->createElement('foobazbar');

//create a new, freestanding text node
$text_node = $xml->createTextNode('The Quick Brown Fox');

//add our text node
$new_node->appendChild($text_node);

//append our new node to the node we pulled out
$baz_node_of_xml->appendChild($new_node);

//output original document.  $baz_nod_of_xml is
//still considered part of the original $xml DomDocument
echo $xml->saveXML();

答案 1 :(得分:2)

如果我没弄错,DOMDocument会尝试将所有XML加载到内存中。如果它很大,它可能会降低效率并取消PHP进程。我遇到过这一次,不得不从DOMDocument切换到基于回调的XML Parser,因此您可以逐行阅读XML并按照您的需要响应标记:

http://www.php.net/manual/en/book.xml.php