Powershell - вставить узел между двумя другими - PullRequest
4 голосов
/ 04 февраля 2010

Я хотел бы вставить узел между двумя другими, уже существующими. В моем сценарии я получаю переменную xml и хочу обновить ее.

Пример:

<mapping ...>
    <INSTANCE .. />
    <INSTANCE .. />
    <CONNECTOR .. />
    <CONNECTOR .. />
</mapping>

результат должен быть:

<mapping ...>
    <INSTANCE .. />
    <INSTANCE .. />
    <NEWINSERT .../>
    <CONNECTOR .. />
    <CONNECTOR .. />
</mapping>

Когда я использую appendChild, вставка всегда выполняется в конце ...

Идея?

Спасибо!

Ответы [ 2 ]

12 голосов
/ 04 февраля 2010

Как ответил @Grhm, вы можете сделать это по InsertAfter.Я бы рекомендовал всегда пытаться перенаправить его на Get-Member, чтобы получить подсказку.

> $x = [xml]@"
<mapping>
    <INSTANCE a="abc" />
    <INSTANCE a="abc" />
    <CONNECTOR a="abc" />
    <CONNECTOR a="abc" />
</mapping>
"@

> $x | gm -membertype method

   TypeName: System.Xml.XmlDocument
Name                        MemberType Definition
----                        ---------- ----------
AppendChild                 Method     System.Xml.XmlNode AppendChild(System.Xml
..
ImportNode                  Method     System.Xml.XmlNode ImportNode(System.Xml.
InsertAfter                 Method     System.Xml.XmlNode InsertAfter(System.Xml
InsertBefore                Method     System.Xml.XmlNode InsertBefore(System.Xm
Load                        Method     System.Void Load(string filename), System
...
WriteTo                     Method     System.Void WriteTo(System.Xml.XmlWriter

> $newe = $x.CreateElement('newelement')
> $x.mapping.InsertAfter($newe, $x.mapping.INSTANCE[1])
> $x | Format-Custom

Лично я считаю gm (или Get-Member) - самый полезный командлет в PowerShell;)

4 голосов
/ 04 февраля 2010

Я бы предположил, что использование appendChild является вашей проблемой - он добавляет узел в конец списка.

Возможно, вы могли бы вместо этого использовать InsertBefore или InsertAfter (при условии, что вы можете получитьссылка на узел по обе стороны от желаемой точки вставки.

См. MSDN для документов по InsertAfter или InsertBefore .

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