PowerShell-在同一元素名称上具有多个命名空间冲突的xml文件

问题描述 投票:0回答:1

与PowerShell 5.1相关

我正在研究XML以展示如何处理冲突的名称空间。这是我创建的示例:

<Employees> 
   <ms:Employee id='1' xmlns:ms="MicrosoftEmployees"> 
       <FirstName>Bill</FirstName>
       <LastName>Gates</LastName>
   </ms:Employee>
   <ms:Employee id='2' xmlns:ms="MicrosoftEmployees"> 
       <FirstName>Paul</FirstName>
       <LastName>Allen</LastName>
   </ms:Employee>
   <ap:Employee id='1' xmlns:ap="AppleEmployees"> 
       <Name>Steve Jobs</Name>
   </ap:Employee>
   <ap:Employee id='2' xmlns:ap="AppleEmployees"> 
       <Name>Steve Wozniak </Name>
   </ap:Employee>
</Employees>

该场景可能是合并来自两家不同公司的数据。

PowerShell演示程序:cls$ filename =“ c:\ XMLClass \ IntroSamples \ Sample05_Simpler_Namespace.xml”[xml] $ xmlDoc =获取内容$ filename

$xmlDoc.Employees.Employee[0]
$xmlDoc.Employees.Employee[1]
$xmlDoc.Employees.Employee[2]
$xmlDoc.Employees.Employee[3]

输出:

id ms                 FirstName LastName
-- --                 --------- --------
1  MicrosoftEmployees Bill      Gates   
2  MicrosoftEmployees Paul      Allen   
1                                       
2                                       

反正有没有获得更合乎逻辑的输出?

似乎PowerShell锁定到它为Employee元素看到的第一个架构,然后无法显示Apple雇员的Name元素。这实际上是有道理的,但是我只是在检查是否有想像力来解决我可能会错过的事情。

我知道我可以使用SelectSingleNodes和XPath,但是只是试图查看PowerShell是否以及如何处理此“现成的”。

如果我反转代码:

$ xmlDoc.Employees.Employee [2]$ xmlDoc.Employees.Employee [3]$ xmlDoc.Employees.Employee [1]$ xmlDoc.Employees.Employee [0]

然后输出是:

id ap             Name          
-- --             ----          
1  AppleEmployees Steve Jobs    
2  AppleEmployees Steve Wozniak 
1                 ms:Employee   
2                 ms:Employee 
powershell xml-namespaces
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.