使用XPath检索属性值的特定属性
问题描述:
在PowerShell中,我试图检索使用XPath属性的值。在下面的例子中,我想为“hi”类别获得“name”的值,这将是“新测试”。使用XPath检索属性值的特定属性
示例代码所示:
<Report name="test" category="thisone">
<String>test</String>
<String>test2</String>
<Report name="new test" category="hi">
<String>hello</String>
<String>hi again</String>
</Report>
</Report>
这是我有:
Select-Xml -XPath "//Report[@name='test']/Report" | Select name |
Out-File "result.txt"
我的结果是:
name ----
我并不真的需要指定类别属性因为<Report>
标签将永远在第一个<Report>
ta之后g,所以这就是为什么我认为使用XPath会更容易。
答
您需要首先展开节点。 Select-XML正在提供该对象。如果你这样做:
Select-Xml -Xml $XML -XPath "//Report[@name='test']/Report"
你会得到
节点:报告
路径:InputStream的
模式://报告[@名称= '测试'] /报告
一旦展开“节点”,你会得到一堆更多的属性
Select-Xml -Xml $XML -xPath "//Report[@name='test']/Report" | Select-Object –ExpandProperty “node” | select *
名称:新的测试
类别:喜
字符串:{你好,喜再次}
的localName:报告
...等...等
以下完整概念
[xml]$XML = @"
<Report name="test" category="thisone">
<String>test</String>
<String>test2</String>
<Report name="new test" category="hi">
<String>hello</String>
<String>hi again</String>
</Report>
</Report>
"@
Select-Xml -Xml $XML -xPath "//Report[@name='test']/Report" | Select-Object –ExpandProperty “node” | select name
答
XPath可以直接获取属性的值。
(Select-Xml -Xml $XML -xPath "//Report[@name='test']/Report/@name").Node.Value
(但仍需要提取值形成最终[XmlAttribute]
)
完美是做到了!顺便说一句,我可以将该值放入一个变量中,在该语句之前添加诸如$ hi =的内容吗?我目前正在使用Out-File到一个文本文件,并且我看到它写入了“name”和“----”,然后是下面的值,我并不真正关心这两行并试图消除它们。 。 – Awsmike
'选择的XML-XML $ XML -xPath “//报告[@名称= '测试'] /报告” | Select-Object -ExpandProperty“节点”| foreach-object {$ _。name} | Out-file“HELLO.TXT”' – ArcSet
好!这也工作得很好!有没有一种方法可以将它分配给一个变量?我试过了,我得到这个:命令流水线位置的cmdlet Select-Xml 1 以下参数的供应值: Xml [0]: – Awsmike