<?xml version="1.0"?>
<Root>
<Book>
<Name>Title1</Name>
<Name>Title2</Name>
<Name>Title3</Name>
</Book>
</Root>
我想从Book节点中选择一个特定元素并将其存储在一个变量中(这样我可以在PowerShell脚本中稍后访问该元素的InnerText)。我尝试了以下方法,但它返回所有元素。使用给定文本选择子元素的正确方法是什么(例如Title1)。
$item = $xml.SelectSingleNode("//Book/[Name='Title1'])
感谢。
答案 0 :(得分:1)
要根据内部文本选择Name
节点,请在xpath子句中使用.
自引用作为属性名称:
$item = $xml.SelectSingleNode("//Book/Name[. = 'Title1']")
答案 1 :(得分:0)
如果您尝试选择Name
节点,那么@Mathias R. Jessen的答案将起作用 - 但如果您尝试查找具有该名称的父节点,则需要调整XPath这样:
$xml.SelectSingleNode("//Book[Name='Title1']");
例如:
$xml = [xml]'<?xml version="1.0"?>
<Root>
<Book>
<Name>Title1</Name>
<Name>Title2</Name>
<Name>Title3</Name>
</Book>
<Book>
<Name>Title4</Name>
<Name>Title5</Name>
</Book>
</Root>'
$xml.SelectSingleNode("//Book[Name='Title5']");
结果:
Name
----
{Title4, Title5}
请注意,即使多次匹配,这也会为您提供匹配的第一个 Book
节点。