我正在尝试从XML文档中选择和删除单个节点。下面的示例代码和XML:
[xml]$xml = Get-Content MyXml.xml
$xml.MigrationTable.Mapping[1].SelectSingleNode("DestinationSameAsSource")
这当前不返回任何内容。此answer显示了一个C#示例,该示例在调用SelectSingleNode()
方法时包括名称空间。
如何在PowerShell中将SelectSingleNode()
包含在名称空间中?
XML:
<?xml version="1.0" encoding="UTF-16"?>
<MigrationTable xmlns="http://microsoft.com/GroupPolicy/GPOOperations/MigrationTable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Mapping>
<Type>LocalGroup</Type>
<Source>Group1@Contoso.local</Source>
<Destination>Group2@contoso.local</Destination>
</Mapping>
<Mapping>
<Type>Unknown</Type>
<Source>Network Service</Source>
<DestinationSameAsSource/>
</Mapping>
<Mapping>
<Type>Unknown</Type>
<Source>Local Service</Source>
<DestinationSameAsSource/>
</Mapping>
</MigrationTable>
答案 0 :(得分:1)
用于NameTable处理的Powershell语法与C#非常相似。加载数据后,基于XML文档创建一个NamespaceManager。
要选择元素,需要使用dummy namespace prefix,在此示例x
中已在Xpath中添加并使用了该元素。像这样
[xml]$xml = Get-Content MyXml.xml
$nsmgr = new-object Xml.XmlNamespaceManager($xml.NameTable)
$nsmgr.AddNameSpace("x", "http://microsoft.com/GroupPolicy/GPOOperations/MigrationTable")
$xml.MigrationTable.Mapping[1].SelectSingleNode("x:DestinationSameAsSource", $nsmgr)