Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell-在同一元素名上具有冲突的多个名称空间的xml文件_Powershell_Xml Namespaces - Fatal编程技术网

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

PowerShell-在同一元素名上具有冲突的多个名称空间的xml文件,powershell,xml-namespaces,Powershell,Xml Namespaces,与PowerShell 5.1相关 我在玩XML来演示如何处理冲突的名称空间。以下是我创建的示例: <Employees> <ms:Employee id='1' xmlns:ms="MicrosoftEmployees"> <FirstName>Bill</FirstName> <LastName>Gates</LastName> </ms:Employee>

与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>
输出:

id ms                 FirstName LastName
-- --                 --------- --------
1  MicrosoftEmployees Bill      Gates   
2  MicrosoftEmployees Paul      Allen   
1                                       
2                                       
是否有更合理的输出

似乎PowerShell锁定了它看到的Employee元素的第一个模式,然后无法显示Apple employees的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 

使用“格式列表”查看所有属性。格式表不能很好地处理不同的属性集

$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 


很酷,但是有没有办法让它们在页面上横穿(水平而不是垂直)?同样有趣的是,即使我试图在4个不同的write语句上独立打印它们,格式表还是会以某种方式将它们进行比较,并将它们与一个公共标题合并在一起。
$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