用2“解析XML;价值观;

用2“解析XML;价值观;,xml,powershell,Xml,Powershell,我尝试从如下XML中选择一个值 <article> <attachments/> <technical> <feature classification="ETIM 5.0" code="EF000889" language="pl" value="EV000074"> <name>Some name</name> <value>1234</value>

我尝试从如下XML中选择一个值

<article>
  <attachments/>
  <technical>
    <feature classification="ETIM 5.0" code="EF000889" language="pl" value="EV000074">
      <name>Some name</name>
      <value>1234</value>
    </feature>
    <feature classification="ETIM 5.0" code="EF000881" language="pl">
      <name>Some name</name>
      <value>345</value>
      <unit>A</unit>
    </feature>
  </technical>
</article>
这项工作几乎完美无瑕,但当一项功能有其自身的价值时,我会得到如下结果:

code         value              unit
EF000889     {EV000074, 1234}          
EF000881     345                A

有人知道如何获得第二价值吗?

这对你有用吗

$p.article.technical.feature |%{ 
    if ($_.value.gettype().fullname -eq "System.Object[]"){$_.value[1]}          
    else{$_.value}
 } 

$p.article.technical.feature.value[1]?@Kayasax会不会降低下一个“feature”的第二个值?也许op希望忽略基于属性的值。@Matt yes,我认为这就是op想要的。使用这样的XML,属性
被合并到一个数组中,因此您不能将值与
foo
区分开来。通过获取
getType().fullName
,可以查询
value
是否为数组。如果它是
System.Object[]
-它是一个数组,则需要遍历它以获取所有值,然后过滤可能需要的值。如果只是第二个,请使用提供的代码@Kayasax。如果没有,则对数组执行foreach循环,并对每个值执行操作。我会编辑条件,
If($\uu0.value.gettype().fullName-eq“System.Object[])
@Vesper是的,这是我正在寻找的属性。谢谢,这样很好:)
$p.article.technical.feature |%{ 
    if ($_.value.gettype().fullname -eq "System.Object[]"){$_.value[1]}          
    else{$_.value}
 }