powershell - PowerShell - xml 文件在同一元素名称上具有冲突的多个命名空间
问题描述
与 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 = Get-Content $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
解决方案
使用格式列表查看所有属性。Format-table 不能很好地处理不同的属性集。
$xmldoc.employees.employee | format-list
id : 1
ms : MicrosoftEmployees
FirstName : Bill
LastName : Gates
id : 2
ms : MicrosoftEmployees
FirstName : Paul
LastName : Allen
id : 1
ap : AppleEmployees
Name : Steve Jobs
id : 2
ap : AppleEmployees
Name : Steve Wozniak
推荐阅读
- parsing - Vue sfc 规范与 html5 或 xhtml 或任何 xml 格式不兼容
- python - 带有两个应用程序的 urls.py 中的 Django Include()
- react-native - 在我提交表单之前禁用 TouchableHighlight
- odoo - Odoo onchange 无法正常工作
- google-colaboratory - 无法访问 Colaboratory 中的文件夹
- sql - 查询错误(SQL Server)
- ruby-on-rails - Rails API 版本控制大礼包 + rabl
- python - 绘制几个可以切换的图
- javascript - 播放视频的任何 Javascript 库,如果我传递图像数组和鼠标移动
- docker - Docker 隔离网络接收来自外部的数据包