Получение предыдущего узла искомого ключевого слова в xml - PullRequest
2 голосов
/ 14 июня 2011

У меня есть XML-документ, подобный следующему:

<bookstore>
  <book>
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
     <first-name>Benjamin</first-name>
     <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book>
    <title>Zen and the Art of Motorcycle Maintenance</title>
    <author>
     <first-name>Robert</first-name>
     <last-name>Pirsig</last-name>
    </author>
    <price>5.99</price>
  </book>
  <book>
    <title>Other Cities</title>
    <author>
     <first-name>Benjamin</first-name>
     <last-name>Rosenbaum</last-name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

Конечно, в книжном магазине имеется более одной книги, поэтому я хочу найти автора, а затем получить XElement дляКнижный узел, содержащий искомое имя автора.

1 Ответ

3 голосов
/ 14 июня 2011
var document = XDocument.Parse(xml);

var bookElements = document.Descendants("book")
    .Where(arg => arg.Element("author").Element("first-name").Value == "Benjamin")
    .ToList();

или

var bookElements = document.Descendants("first-name")
    .Where(arg => arg.Value == "Benjamin")
    .Select(arg => arg.Parent.Parent)
    .ToList();

[Редактировать] По мере того, как вы будете редактировать вопрос, я буду редактировать ответ:).

Чтобы найти первую книгу, соответствующую критериям:

var foundBookElement = document.Descendants("book")
    .Where(arg => arg.Element("author").Element("first-name").Value == "Benjamin")
    .FirstOrDefault();

foundBookElement будет нулевым, если ни одна из книг не соответствует критериям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...