我有一个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"
将@在北京时间的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"]