我正在尝试获取以下屏幕截图中其中一个分支的值 - 值为<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的屏幕截图:
更新 基于@ 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
答案 0 :(得分:1)
您可以在xpath中获取逐个位置索引,例如:
//Phases/Phase/Package[@PackageName='intel_teaming_script.ps1']//Param[2]/ParamValue
在xpath之上返回找到的 2nd <ParamValue>
。请注意,xpath位置索引从1而不是0开始。