如何从具有相同名称的XML获取特定值

时间:2015-05-01 13:25:10

标签: xml powershell

我正在尝试获取以下屏幕截图中其中一个分支的值 - 值为<ParamValue>并带有蓝色箭头。

问题在于有太多具有相同名称的brances,我认为我想要过滤它们的唯一方法就是名称(不想做将来可能会使用的CommandID) - 所以, PackageName="intel_teaming_script.ps1"

我该怎么做?我尝试了以下但它没有显示任何回复:

[xml]$xml = Get-content C:\temp\build.xml
    $node = $xml.SelectSingleNode("//Phases/Phase/Package[@PackageName='intel_teaming_script']")
    $node.PackageName

我也试过这个但仍然没有得到它:

$findxml = $xml.Phases.Phase.Package | Where-Object {$_.PackageName -eq 'intel_teaming_script.ps1'}
$findxml.PackageName

即使我做了上述操作,我仍然需要挖掘并获取价值 - 这是一个IP地址。

以下XML的屏幕截图:

enter image description here

更新 基于@ har07的答案,以下是我得到的答案:

$node = $xml.SelectSingleNode("//Phases/Phase/Package[@PackageName='intel_teaming_script.ps1']//ParamValue")

ParamValue

#text                                                                                                                                                                                                                                                            
-----                                                                                                                                                                                                                                                            
1.1.1.1  

如果我尝试将其转换为String然后使用ExpandProperty,我仍然会列出ParamValue ..我知道如何获取IP地址?

$node = $xml.SelectSingleNode("//Phases/Phase/Package[@PackageName='intel_teaming_script.ps1']//ParamValue")
$node.ToString()
$node | select -ExpandProperty "#text"

结果:

ParamValue
1.1.1.1

1 个答案:

答案 0 :(得分:1)

您可以在xpath中获取逐个位置索引,例如:

//Phases/Phase/Package[@PackageName='intel_teaming_script.ps1']//Param[2]/ParamValue

在xpath之上返回找到的 2nd <ParamValue>。请注意,xpath位置索引从1而不是0开始。