根据兄弟节点的值选择XML节点

mar*_*rky 2 xml vb.net xpath

我有一个VB.NET 2013程序,它读取/写入xml文档,当我知道其中一个节点的兄弟节点的文本时,我正试图弄清楚如何访问特定节点.我看过其他帖子我正在尝试的类似,但我的xml结构略有不同,我不知道如何将这些解决方案应用到我的文档中.

这是我的xml结构示例:

<?xml version="1.0" encoding="utf-8"?>
<Books>
  <Book>
    <Title>Hansel and Gretel</Title>
    <Pages>221</Pages>
    <Price>3.5</Price>
    <Author>Grimm</Author>
  </Book>
  <Book>
    <Title>Green Eggs and Ham</Title>
    <Pages>145</Pages>
    <Price>5.25</Price>
    <Author>Dr. Seuss</Author>
  </Book>
</Books>
Run Code Online (Sandbox Code Playgroud)

我在其他帖子中看到的示例在节点名称中包含值<Title title="Green Eggs and Ham">.如你所见,我的不是.

我无法弄清楚如何使用XPath,XPathNavigator等来查找我的xml文档的价格,例如,如果我知道标题.

我看到了很多看起来像的例子:/Books/Book[@Title="Green Eggs and Ham"]我尝试将它与XPathNavigator.SelectSingleNode()一起使用,但我无法弄清楚正确的VB.Net/XPath语法与我的xml格式一起使用.

更新(示例答案)由于我在VB.NET项目中使用它,我需要知道如何使用Bogdan和ThW给出的示例.使用我的示例XML我这样做是为了获得标题"Hansel and Gretel"的页面数量:

Dim xpathDoc As XPathDocument = New XPathDocument([path_to_xml)
Dim xmlNav as XPathNavigator = xpathDoc.CreateNavigator()
Dim pages as String

pages = xmlNav.SelectSingleNode("/Books/Book[Title='Hansel and Gretel']/Pages").Value
Run Code Online (Sandbox Code Playgroud)

当然,返回"221"

ThW*_*ThW 7

@在北京时间的XPath的捷径attribute::.它选择属性节点(或属性轴上的更多特定节点).

您的Title节点是元素节点.它是Book元素节点的子元素.child是默认轴,因此它是可选的.基本上/Books/Book是简称/child::Books/child::Book.

部分[]是节点的条件.[@Title="Green Eggs and Ham"]过滤Title具有给定值的属性的节点.

要查找子元素节点,请Title删除@.

/Books/Book[Title="Green Eggs and Ham"]