Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否使用DOMdocument在XML文件中追加元素?_Php_Xml - Fatal编程技术网

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

Php 是否使用DOMdocument在XML文件中追加元素?,php,xml,Php,Xml,每当我想要创建XML文档时,我都会在php中使用DOMdocument类 但是,如何打开XML文档并在XML文档中的现有元素之后添加元素呢 它是一个非常巨大的XML文档,所以考虑到最有效的方法是很好的。 < P>如果我没有错,DOMBOOST尝试将所有XML加载到内存中。如果它太大,可能会降低效率并使PHP进程崩溃。我曾经遇到过这种情况,不得不从DOMDocument切换到基于回调的XML解析器,这样您就可以逐行读取XML并根据需要响应标记: 如果我没有弄错的话,DOMDocument会尝试将所

每当我想要创建XML文档时,我都会在php中使用DOMdocument类

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


它是一个非常巨大的XML文档,所以考虑到最有效的方法是很好的。

< P>如果我没有错,DOMBOOST尝试将所有XML加载到内存中。如果它太大,可能会降低效率并使PHP进程崩溃。我曾经遇到过这种情况,不得不从DOMDocument切换到基于回调的XML解析器,这样您就可以逐行读取XML并根据需要响应标记:


如果我没有弄错的话,DOMDocument会尝试将所有XML加载到内存中。如果它太大,可能会降低效率并使PHP进程崩溃。我曾经遇到过这种情况,不得不从DOMDocument切换到基于回调的XML解析器,这样您就可以逐行读取XML并根据需要响应标记:


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

$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();
$xml=newDOMDocument();
$xml->loadXml('Node Contents');
//抓住一个节点
$xpath=newdomxpath($xml);
$results=$xpath->query('/foo/baz');
$baz_node_of_xml=$results->item(0);
//创建一个新的独立节点
$new_node=$xml->createElement('foobazbar');
//创建新的独立文本节点
$text_node=$xml->createTextNode(“快速棕色狐狸”);
//添加我们的文本节点
$new\u node->appendChild($text\u node);
//将新节点附加到我们提取的节点
$baz_node_of_xml->appendChild($new_node);
//输出原始文档$xml的baz_nod_是
//仍被视为原始$xml文档的一部分
echo$xml->saveXML();

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

$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();
$xml=newDOMDocument();
$xml->loadXml('Node Contents');
//抓住一个节点
$xpath=newdomxpath($xml);
$results=$xpath->query('/foo/baz');
$baz_node_of_xml=$results->item(0);
//创建一个新的独立节点
$new_node=$xml->createElement('foobazbar');
//创建新的独立文本节点
$text_node=$xml->createTextNode(“快速棕色狐狸”);
//添加我们的文本节点
$new\u node->appendChild($text\u node);
//将新节点附加到我们提取的节点
$baz_node_of_xml->appendChild($new_node);
//输出原始文档$xml的baz_nod_是
//仍被视为原始$xml文档的一部分
echo$xml->saveXML();

此方法是否将整个XML DOM树读入内存?因为文件非常大…我不确定DOMDocument的内部是如何工作的。一方面,大多数基于树的解析器将整个文档读入内存。另一方面,当您试图打印DOMDocument对象时,您只能看到所有可用节点的一小部分。试一试,如果它执行得很好,您就可以开始了,f不要查看XMLParser或XMLReader。这个方法是否将整个XMLDOM树读入内存?因为文件非常大…我不确定DOMDocument的内部是如何工作的。一方面,大多数基于树的解析器将整个文档读入内存。另一方面,当您试图打印DOMDocument对象时,您只能看到所有可用节点的一小部分。试一试,如果它执行得很好,您就可以使用它了,不要查看XMLParser或XMLReader。