2010-03-13 71 views
4

給定一個XML結構是這樣的:在.NET XmlDocument中移動「小孩」的最佳方式是什麼?

<garage> 
<car>Firebird</car> 
<car>Altima</car> 
<car>Prius</car> 
</garage> 

我要「移動」普銳斯節點「上一級」,所以它出現在Altima的節點之上。這裏的最終結構我想:

<garage> 
<car>Firebird</car> 
<car>Prius</car> 
<car>Altima</car> 
</garage> 

所以給出的C#代碼:

XmlNode priusNode = GetReferenceToPriusNode() 

什麼是導致priusNode以「動起來」,在車庫裏的孩子列表中的一個地方最好的方法是什麼?

+2

你爲什麼要將普銳斯的制動問題提起來? – kenny 2010-03-13 03:58:13

+1

@Mike:你知道C#中的'XmlDocument'類和VB.NET是一樣的,對嗎?稱它爲「C#XmlDocument」只是一種演講方式,對吧? – 2010-03-13 04:11:10

回答

8

獲取前一個兄弟節點,刪除您想從其父移動,然後將同級之前重新插入的節點。

XmlNode parent = priusNode.ParentNode. 
XmlNode previousNode = priusNode.PreviousSibling; 
//parent.RemoveChild(priusNode); // see note below 
parent.InsertBefore(priusNode, previousNode); 

錯誤處理被忽略,但對於真正的實現將是必需的。

編輯:每邁克的評論中,removeChild之呼是多餘的:作爲文檔說,「如果newChild對象[在這種情況下priusNode]已經在樹上,它從原來的位置刪除,並添加到其目標位置「。謝謝邁克!

+0

這絕對是直接的,工作正常。我還注意到RemoveNode()調用是無關緊要的 - InsertBefore()只會移動它。 – Mike 2010-03-13 03:37:57

+0

爲了使它更通用且更安全,您應該添加一個檢查來查看previousSibling是否真的存在(if(previousNode!= null)...) – Allie 2013-05-15 14:00:24

相關問題