我在PHP中使用DOMdocument类,每当我想创建一个XML文档。使用DOMdocument在XML文件中追加元素?
但是我怎样才能打开一个XML文档并在XML文档中的现有元素之后添加元素?
它是一个非常庞大的XML文档,所以最好能考虑最有效的方法来做到这一点。
我在PHP中使用DOMdocument类,每当我想创建一个XML文档。使用DOMdocument在XML文件中追加元素?
但是我怎样才能打开一个XML文档并在XML文档中的现有元素之后添加元素?
它是一个非常庞大的XML文档,所以最好能考虑最有效的方法来做到这一点。
如果您坚持使用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();
如果我没有弄错,DOMDocument会尝试将所有的XML加载到内存中。如果它很大,它可能会导致效率下降,并导致您的PHP过程中断。我跑进这一次,不得不从DOM文档转换为XML解析器,这是回调为主,这样您可以读取XML行由行,你认为合适的标签响应:
这种方法是否将整个XML DOM树读入内存?导致该文件是非常巨大的... – ajsie 2010-03-06 17:38:14
我不确定DOMDocument的内部如何工作。一方面,大多数基于树的解析器都会将整个文档读入内存。另一方面,当你尝试print_r或者var_dump一个DOMDocument对象时,你只能看到所有可用节点的一小部分。试一试,如果它表现良好,那么你很好,f不会查看XMLParser或XMLReader。 – 2010-03-07 04:15:25