好的,我試圖達到這個好幾個小時,似乎無法找到解決方案,所以我就在這裏!PHP DOMDocument將節點從一個文檔移動到另一個文檔
我有2個DOMDocument,我想將文檔的節點移動到另一個。我知道這兩個文件的結構,它們是相同的類型(所以我應該沒有問題來合併它們)。
任何人都可以幫到我嗎?如果您需要更多信息,請告訴我。
謝謝!
好的,我試圖達到這個好幾個小時,似乎無法找到解決方案,所以我就在這裏!PHP DOMDocument將節點從一個文檔移動到另一個文檔
我有2個DOMDocument,我想將文檔的節點移動到另一個。我知道這兩個文件的結構,它們是相同的類型(所以我應該沒有問題來合併它們)。
任何人都可以幫到我嗎?如果您需要更多信息,請告訴我。
謝謝!
要複製(或)將節點移動到另一個DOMDocument
,必須將節點導入到新的DOMDocument
和importNode()
。從手動拍攝的實施例:
$orgdoc = new DOMDocument;
$orgdoc->loadXML("<root><element><child>text in child</child></element></root>");
$node = $orgdoc->getElementsByTagName("element")->item(0);
$newdoc = new DOMDocument;
$newdoc->loadXML("<root><someelement>text in some element</someelement></root>");
$node = $newdoc->importNode($node, true);
$newdoc->documentElement->appendChild($node);
凡importNode()
第一個參數是節點本身,第二個參數是一個布爾值指示是否要導入整個節點樹。
您需要將其導入到目標文檔中。請參見DOMDocument::importNode
將此代碼用於未知文檔結構。
$node = $newDoc->importNode($oldDoc->getElementsByTagName($oldDoc->documentElement->tagName)->item(0),true);
<?php
protected function joinXML($parent, $child, $tag = null)
{
$DOMChild = new DOMDocument;
$DOMChild->loadXML($child);
$node = $DOMChild->documentElement;
$DOMParent = new DOMDocument;
$DOMParent->formatOutput = true;
$DOMParent->loadXML($parent);
$node = $DOMParent->importNode($node, true);
if ($tag !== null) {
$tag = $DOMParent->getElementsByTagName($tag)->item(0);
$tag->appendChild($node);
} else {
$DOMParent->documentElement->appendChild($node);
}
return $DOMParent->saveXML();
}
?>
我如何遍歷一個DOMDocument的所有節點?我認爲foreach會工作... – AlexV 2011-04-20 20:10:00
最簡單的方法是使用這樣的XPath:'$ xpath = new DOMXPath($ doc); $ allNodes = $ xpath-> query('// *');' – 2011-04-20 20:13:18