我想在已经存在的2个其他节点之间插入一个节点。 在我的脚本中,我收到一个xml变量,我想更新这个。
前:
<mapping ...>
<INSTANCE .. />
<INSTANCE .. />
<CONNECTOR .. />
<CONNECTOR .. />
</mapping>
结果应为:
<mapping ...>
<INSTANCE .. />
<INSTANCE .. />
<NEWINSERT .../>
<CONNECTOR .. />
<CONNECTOR .. />
</mapping>
当我使用appendChild时,插件总是在最后完成...
一个想法?
谢谢!
答案 0 :(得分:12)
正如@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中最有用的cmdlet;)
答案 1 :(得分:4)
我建议使用appendChild
是你的问题 - 它会将节点附加到列表的末尾。
您可以改为使用InsertBefore
或InsertAfter
(假设您可以获取所需插入点任意一侧的节点的引用。
有关InsertAfter或InsertBefore上的文档,请参阅MSDN。