我有一个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>
我在其他帖子中看到的示例中包含节点名称<Title title="Green Eggs and Ham">
中的值。如你所见,我的不是。
我无法弄清楚如何在我的xml文档中使用XPath,XPathNavigator等来查找价格,例如,如果我知道标题。
我看到很多示例如下:/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
当然,返回“221”
答案 0 :(得分:6)
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"]
答案 1 :(得分:0)
//Book/Title[text()='Green Eggs and Ham']/../Price
text()
搜索价值。 ..
选择父元素
修改强>
感谢您对.
的解释,已从答案中移除。