我正在尝试从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>发布于 2019-04-12 20:40:58
用于处理NameTable的Powershell语法与C#非常相似。加载数据后,基于XML文档创建一个NamespaceManager。
要选择元素,需要使用dummy namespace prefix,在本例中,在Xpath中添加和使用了x。就像这样,
[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)https://stackoverflow.com/questions/55651448
复制相似问题