星期五, 5月 23, 2008

複製xml node至另一個xml document

同文件可用 (XmlNode)xmlnode.Clone()
不同文件得用 ImportNode
格式:ImportNode(XmlNode node,bool deep) //deep 要不要複製該node的子node
範例:
XmlNode newNode = xmldocument.ImportNode(xmlNode,true)
xmldocument.SelectSingleNode("//xxx").appendchild(newNode );


***注意***
在importNode時,常會先把本身的child node刪掉
再將加入新的
//1.先清除舊的
XmlNodeList oldNodes = xmlNode.SelectNodes("//AA").ChildNodes;
foreach (XmlNode oldNode in oldNodes )
xmlNode["AA"].RemoveChild(oldNode );

直覺沒問題,執行也沒問題
但不過AA的child有幾個,迴圈也只會執行一次
因為刪了一個node,該list就會少了一個
所以當迴圈再跑下一個時,其實已重讀該list
而第一個又為null,所以就執行一次就跳出迴圈了
以上純屬虛構...如有巧合....

不過真的只會執行一次,程式又沒錯
所以都不會發現
總之改用while,每次刪第一個就好了
while (xmlNode["AA"].ChildNodes.Count > 0) xmlNode["AA"].RemoveChild(xmlNode["AA"].ChildNodes[0]);

*後記
不知在耍什麼白痴
要清掉childenodes 為什麼要用這麼麻煩的方法
直接node.innerxml=""; 不就好了................

沒有留言: