用2“解析XML;价值观;
我尝试从如下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>
<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}
}