我在PHP中使用DOMDocument创建一个新的XML文件。这很好。在文档之间我想添加一个已经创建的XML文件。我怎么能这样做?
现有XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<magazine id="0" time="2014-02-18T14:42:06.0Z" type="0">New magazine</magazine>
</book>
</books>
使用PHP的DOM函数,我创建了另一个XML文件。这很好用。现在我加载上面的文件并创建一个fragement:
$fragement = $document->createDocumentFragment();
$fragement->appendXML($this->xmlparser);
但现在我不知道如何将片段添加到我的文档中。我试过了:
$document->documentElement->appendChild($fragement);
这对我的XML文档没有影响。
答案 0 :(得分:3)
您不能将appendXML()
与该文档一起使用,因为它会添加另一个XML声明,只能在文档的开头使用。总的来说,appendXML()
是一个坏主意,因为你正在使用原始XML数据进行快速和松散的播放。使用第二个DOM,将文档节点导入第一个DOM并附加它。
$xml1 = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<root><notbooks/></root>
XML;
$xml2 = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<magazine id="0" time="2014-02-18T14:42:06.0Z" type="0">New magazine</magazine>
</book>
</books>
XML;
$dom1 = new DOMDocument();
$dom1->formatOutput = true; // These formatting options are only used
$dom1->preserveWhiteSpace = false; // for demonstration purposes here.
$dom1->loadXML($xml1);
$dom2 = new DOMDocument();
$dom2->loadXML($xml2);
$node = $dom1->importNode($dom2->documentElement, true);
$dom1->documentElement->appendChild($node);
$dom1->loadXML($dom1->saveXML()); // Just to make it pretty for the output below.
echo $dom1->saveXML();
<?xml version="1.0" encoding="UTF-8"?>
<root>
<notbooks/>
<books>
<book>
<magazine id="0" time="2014-02-18T14:42:06.0Z" type="0">New magazine</magazine>
</book>
</books>
</root>