使用给定文本从XML节点中选取元素

时间:2016-03-23 19:57:20

标签: xml powershell xpath

<?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'])

感谢。

2 个答案:

答案 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节点。