2010-03-06 4 views

답변

3

DOM 문서를 사용하는 경우 새 노드를 추가하는 것은 기존 노드에 대한 참조를 가져 와서 자식 노드를 만든 다음 해당 노드에 새 노드를 추가하는 것만 큼 간단합니다. 아래의 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(); 
+0

이 메서드는 전체 XML DOM 트리를 메모리로 읽습니까? 파일이 매우 큰 이유는 ... – ajsie

+0

DOMDocument가 어떻게 작동하는지 잘 모르겠습니다. 한 손으로, 대부분의 트리 기반 파서는 전체 문서를 메모리로 읽습니다. 반면에 DOMDocument 객체를 print_r 또는 var_dump하려고하면 사용 가능한 모든 노드 중에서 일부만 볼 수 있습니다. 시도 해보고 XMLParser 또는 XMLReader를 조사하지 않는 것이 좋습니다. –

2

내가 잘못하지 않으면 DOMDocument는 모든 XML을 메모리에로드하려고 시도합니다. 거대하면 효율성을 떨어 뜨리고 PHP 프로세스를 중단시킬 수 있습니다. 나는 한번으로 실행 및 콜백 기반 XML 파서에 DOMDocument를 전환했다, 그래서 당신은에 의해 온라인 온라인 당신의 XML을 읽고 당신이 맞는 볼 태그에 응답 할 수 있습니다 :

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

관련 문제