说我有这样的结构:
[xml]$i = "
<root>
<item>
<id>1</id>
<data>Content_Of_1</data>
</item>
<item>
<id>2</id>
<data>Content_Of_2</data>
<item>
<id>5</id>
<data>Content_Of_5</data>
</item>
</item>
</root>
"
$foo = @(1,2,3)
我想选择$ i.root.item.data,其中$ i.root.item.id在$ foo中。
要选择与数组中的ID匹配的节点,我可以执行以下操作:
($i.root.item | ? {$foo -contains $_.id})
但是由于某种原因,如果我尝试获取$ _。data,我什么也没得到:
($i.root.item | ? {$foo -contains $_.id}).data
为什么?
最佳答案
But for some reason if I try to get at $_.data, I get nothing:
($i.root.item | ? {$foo -contains $_.id}).data
一无所获的原因是您正在尝试访问整个集合上不存在的属性(数据)。您需要执行以下操作:
$i.root.item | ? {$foo -contains $_.id} | ForEach-Object { $_.data }
它访问每个对象上的data属性。
您还可以在data属性中为每个对象选择值:
$i.root.item | ? {$foo -contains $_.id} | Select-Object data
它将产生一个PSCustomObjects数组,其中每个对象将包含一个名为data的单个属性(与ForEach-Object示例中的字符串数组相反)。
请注意,在Powershell 3.0中,通过新的属性枚举功能,您的原始语法将产生所需的结果,因为枚举将自动完成。
关于xml - Powershell选择XML节点,其中属性包含在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051751/