繁体   English   中英

使用SimpleXML将节点从一个XML文档移动到另一个XML文档

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM