Каков наилучший способ «поднять ребенка» в .NET XmlDocument? - PullRequest
4 голосов
/ 13 марта 2010

Имеется такая структура XML:

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

Я хочу «переместить» узел Prius «на один уровень вверх», чтобы он отображался над узлом Altima. Вот последняя структура, которую я хочу:

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

Итак, учитывая код C #:

XmlNode priusNode = GetReferenceToPriusNode()

Какой лучший способ заставить priusNode «переместиться» вверх на одно место в списке детей гаража?

Ответы [ 2 ]

8 голосов
/ 13 марта 2010

Получите предыдущий узел-брат, удалите узел, который вы хотите переместить из его родителя, и заново вставьте его перед братом.

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

Обработка ошибок игнорируется, но потребуется для реальной реализации.

РЕДАКТИРОВАТЬ: Согласно комментарию Майка, вызов RemoveChild является излишним: как говорят документы: «Если newChild [в данном случае priusNode] уже находится в дереве, это удалены из исходного положения и добавлены в целевое положение. " Спасибо, Майк!

0 голосов
/ 13 марта 2010

Попробуйте

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.parentnode.aspx

XmlNode nodParent = priusNode.ParentNode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...