![](/img/trans.png)
[英]Using SimpleXML/DOM to copy node from one XML to another via php
[英]Moving a node from one XML document to another using SimpleXML
我意识到仅使用SimpleXML是不可能的,我确实做了很多工作。 这是我尝试过的:
$newXML = simplexml_load_file($filePath);
$domNewXML = dom_import_simplexml($newXML);
$domItem = dom_import_simplexml($items[$itemQty]); <-- item I want to move
$domNewItem = $domItem->cloneNode(true);
$newNode = $domNewXML->importNode($domNewItem, true);
$domNewXML->getElementsByTagName('list')->item(0)->appendChild($newNode);
我意识到第5行出现了代码错误,因为importNode是dom文档的功能,而不是dom元素,但是如何获取dom文档来执行此步骤?
我要这样做正确吗?
在总体方案中,我有一个至少有10个节点的XML文件,每天CRON作业都要检查以查看是否有10个以上的节点,如果有,则应将节点从当前文件移到存档文件中。 我想通过将其复制到存档文件并将其从原始文件中删除来“移动”节点。
谢谢你的帮助!
您可以通过$ anyDOMNode-> ownerDocument获取所有者文档
也许没有必要克隆节点并将其插入另一个文档。 如果将存档拆分为a)框架xml文档和b)作为外部实体包含在文档中的xml片段,则只需将节点的xml字符串表示形式附加到片段文件的末尾就足够了。 例如作为骨架
<?xml version="1.0"?>
<!DOCTYPE fooarchive [
<!ENTITY entries SYSTEM "archive.fragment">
]>
<fooarchive>
&entries;
</fooarchive>
然后是PHP脚本
$doc = new SimpleXMLElement('<a>
<b>0</b><b>1</b><b>2</b><b>3</b>
<b>4</b><b>5</b><b>6</b><b>7</b>
<b>8</b><b>9</b><b>X</b><b>Y</b>
</a>');
$move = '';
for($i=10; $i<count($doc->b); $i++) {
$move .= $doc->b[$i]->asXML();
}
file_put_contents('archive.fragment', $move, FILE_APPEND);
for($i=count($doc->b)-1; $i>9; $i--) {
unset($doc->b[$i]);
}
echo $doc->asXML('current.xml');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.