我有一个从以下XML结构生成的Powershell对象(它来自SOAP Web服务):
<item>
<id>123</id>
<newAttrs>
<item>
<name>uid</name>
<values>
<item>nUser1</item>
</values>
</item>
<item>
<name>cn</name>
<values>
<item>some user name</item>
</values>
</item>
</newAttrs>
</item>
但请注意,这实际上是一个对象而不是xml。所以我可以通过$item.id
我想知道我是否可以访问newAttrs数组中相似的项目值。所以我想的是$item.newAttrs[name="uid"].Values
或者我必须迭代newAttrs数组吗?
有这样的事吗? 非常感谢!
答案 0 :(得分:0)
我认为.SelectNodes()方法可以实现您的目标:
$item.SelectNodes("//newAttrs[contains(name,""uid"")]").values
或者,如果您只想要该项目的文本,则可以将.InnerText
附加到该命令的末尾。
编辑:抱歉,我误会了。我以为它是XML,但你只知道如何引用它就好像它是一个对象。因此,如果我理解正确,你应该有一个像这样的对象:
$item = [pscustomobject]@{
"id" = '123'
'newAttr' = [pscustomobject]@{
'uid' = 'nUser1'
'cn' = 'some user name'
}
}
其中$ item有两个属性,&#39; id&#39;和&#39; newAttr&#39;。 &#39; ID&#39;是一个字符串,&#39; newAttr&#39;是一个嵌套的对象,有两个属性,即&#39; uid&#39;和&#39; cn&#39;,两者都是字符串。如果是这种情况,您可以参考&#39; uid&#39;属性只需引用它就像这样:
$item.newAttr.uid
这是否能达到您的目的,还是我仍然误解?
编辑2:好的,因为这是一个对象数组,听起来你已经按照我所知道的最佳方式做了这件事:
$item.newAttr | Where{$_.name -eq 'uid'} | Select -ExpandProperty Value
这将为您提供“价值”的价值。数组中每个项目的属性,其中名称为&#39;财产等于&#39; uid&#39;。