xml - Powershell选择XML节点,其中属性包含在数组中

标签 xml powershell xpath

说我有这样的结构:

[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/

相关文章:

powershell - Windows的Docker无法启动

java - 如何将 xml 文件中的“实体更改为”

php - Magento Controller 适用于 Windows,不适用于 Linux

c# - 从 XML 更新插入 SQL Server 表

c# - 在 Selenium C# 中选择单选按钮

python - 有没有办法最小化这个scrapy蜘蛛的长度

python - 使用 Splinter 运行测试时 XPath 未解析为链接

PHP 和 DOMDocument removeNode 留下空行

powershell - 在powershell中隐藏标题栏

PowerShell 数学错误