在特定位置将子对象追加到XML

在特定位置将子对象追加到XML,xml,powershell,appendchild,Xml,Powershell,Appendchild,我有一个XML文件,如下所示: ... ... ... ... ... 现在,考虑到正确的位置,即名为“Bookings”的父文件,我想将以下XML文件附加到第一个XML文件中: ... 因此,最终的XML文件应该如下所示: ... ... ... ... ... ... 目前,我的PowerShell脚本如下所示: [xml]$x=获取内容C:\Users\user\Desktop\exitingViews.xml; [xml]$y=获取内容C:\Users\user\Deskto

我有一个XML文件,如下所示:


...
...
...
...
...
现在,考虑到正确的位置,即名为“Bookings”的父文件,我想将以下XML文件附加到第一个XML文件中:


...
因此,最终的XML文件应该如下所示:


...
...
...
...
...
...
目前,我的PowerShell脚本如下所示:

[xml]$x=获取内容C:\Users\user\Desktop\exitingViews.xml;
[xml]$y=获取内容C:\Users\user\Desktop\newView.xml;
$x.ViewsFile.Categories.ViewCategory.Views.AppendChild($x.ImportNode($y.ViewCategory.Views.View),$true));
$x.Save('C:\Users\user\Desktop\final.xml');
但它仅将新视图附加到最后一个类别


是否有任何“简单”的可能性来定义子节点的附加位置?

当您使用
System.XML.XmlDocument
提供的PowerShell对XML DOM的方便改编时,
操作符执行,这意味着像
.ViewCategories
这样的访问将以该名称返回所有子元素

因此,您需要过滤
.ViewCategories
数组
,以获取感兴趣的特定元素,您可以使用(PSv4+)


或者,使用XPath查询来定位感兴趣的元素,方法是:


注意:我使用了一个快捷方式
/
,它可以在文档中的任何位置找到
viewcategy
元素,但您可以将整个路径拼写为
/ViewsFile/Categories/viewcategy[@Name=“Bookings”]
,这会更快并避免歧义。

当您使用PowerShell对
System.XML.XmlDocument
提供的XML DOM进行方便的改编时,
操作符将执行该操作,这意味着诸如
.ViewCategories
之类的访问将以该名称返回所有子元素

因此,您需要过滤
.ViewCategories
数组
,以获取感兴趣的特定元素,您可以使用(PSv4+)


或者,使用XPath查询来定位感兴趣的元素,方法是:

注意:我使用了一个快捷方式
/
,它可以在文档中的任何位置找到
viewcategy
元素,但是您可以将整个路径拼写为
/ViewsFile/Categories/viewcategy[@Name=“Bookings”]
,这会更快,避免歧义

$x.ViewsFile.Categories.ViewCategory.Where({ $_.Name -eq 'Bookings' }).Views.AppendChild($x.ImportNode(($y.ViewCategory.Views.View), $true))
$x.SelectSingleNode('//ViewCategory[@Name = "Bookings"]').Views.AppendChild($x.ImportNode(($y.ViewCategory.Views.View), $true))