与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