在.NET XmlDocument中移动"孩子"的最佳方法是什么?

Mik*_*ike 4 c# xml

给定这样的XML结构:

<garage>
 <car>Firebird</car>
 <car>Altima</car>
 <car>Prius</car>
</garage>
Run Code Online (Sandbox Code Playgroud)

我希望将"Prius"节点"移动""一级",使其显示在Altima节点上方.这是我想要的最终结构:

<garage>
 <car>Firebird</car>
 <car>Prius</car>
 <car>Altima</car>
</garage>
Run Code Online (Sandbox Code Playgroud)

所以考虑到C#代码:

XmlNode priusNode = GetReferenceToPriusNode()
Run Code Online (Sandbox Code Playgroud)

什么是让priusNode在车库的子列表中"向上移动"一个位置的最佳方法是什么?

ito*_*son 8

获取上一个兄弟节点,删除要从其父节点移动的节点,然后在兄弟节点之前重新插入它.

XmlNode parent = priusNode.ParentNode.
XmlNode previousNode = priusNode.PreviousSibling;
//parent.RemoveChild(priusNode);  // see note below
parent.InsertBefore(priusNode, previousNode);
Run Code Online (Sandbox Code Playgroud)

错误处理被忽略但是实际实现需要.

编辑:根据Mike的评论,RemoveChild调用是多余的:正如文档所说,"如果newChild [在这种情况下是priusNode]已经在树中,它将从原始位置移除并添加到其目标位置." 谢谢迈克!