我很难找到任何信息来帮助我弄清楚如何将XML命名空间从一个XML文档添加到另一个XML文档。我尝试使用System.XML.XmlNamespaceManager类无济于事。举个例子,假设我有一个这样的XML文档:
<mso:customUI xmlns:x2="DMOLAddin" xmlns:x1="MimecastServicesForOutlook.AddinModule" xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui">
<mso:ribbon>
foo
</mso:customUI>
我还有另一个这样的XML文档:
<mso:customUI xmlns:x3="crmaddin.RibbonAddin" xmlns:x2="DMOLAddin" xmlns:x1="MimecastServicesForOutlook.AddinModule" xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui">
<mso:ribbon>
Bar
</mso:ribbon>
</mso:customUI>
我将如何枚举文档一中的命名空间,并仅添加两个尚未存在的文档?
答案 0 :(得分:0)
这样的事情会起作用吗?
[xml]$xml1 = @"
<mso:customUI xmlns:x2="DMOLAddin" xmlns:x1="MimecastServicesForOutlook.AddinModule" xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui">
<mso:ribbon>
foo
</mso:ribbon>
</mso:customUI>
"@
[xml]$xml2 = @"
<mso:customUI xmlns:x3="crmaddin.RibbonAddin" xmlns:x2="DMOLAddin" xmlns:x1="MimecastServicesForOutlook.AddinModule" xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui">
<mso:ribbon>
Bar
</mso:ribbon>
</mso:customUI>
"@
$ns1 = $xml1.customUI.Attributes |
Where-Object { $_.Prefix -eq 'xmlns' }
$ns2 = $xml2.customUI.Attributes |
Where-Object { $_.Prefix -eq 'xmlns' } |
ForEach-Object { $_.LocalName }
$ns1 | Where-Object {
$ns2 -notcontains $_.LocalName
} | ForEach-Object {
$xml2.customUI.SetAttribute($_.Name, $_.Value)
}