У меня есть программа 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">
. Как видите, у меня нет.
Я не могу понять, как использовать XPath, XPathNavigator и т. д. для моего XML-документа, чтобы найти цену, например, если я знаю название.
Я вижу много примеров, которые выглядят так: /Books/Book[@Title="Green Eggs and Ham"]
, и я пытался использовать это с XPathNavigator.SelectSingleNode(), но я не могу понять правильный синтаксис VB.Net/XPath для использования с моим форматом xml.
ОБНОВЛЕНИЕ (Пример ответа) Поскольку я использую это в проекте VB.NET, мне нужно было знать, как использовать примеры, которые дали Богдан и ThW. Используя мой пример XML, я сделал это, чтобы получить количество страниц для заголовка «Гензель и Гретель»:
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"