Вместо того, чтобы искать братьев и сестер, вы можете искать все родительские элементы <Book>
с условной фильтрацией предложений для тех с определенным значением для их <Title>
дочернего элемента. Затем для всех совпадений верните значения трех желаемых дочерних элементов.
Это проще всего сделать, используя LINQ to XML :
var root = XElement.Parse(xmlString);
var title = "Hansel and Gretel";
var query = root
.Elements("Book")
.Where(e => (string)e.Element("Title") == title)
.Select(e => new
{
Pages = (int)e.Element("Pages"),
Price = (decimal)e.Element("Price"),
Author = (string)e.Element("Author"),
});
var results = query.ToList();
Однако, если вы предпочитаете использовать XPath запросов, вы можете выполнить:
var query = root
.XPathSelectElements(string.Format("/Book[Title='{0}']", title))
.Select(e => new
{
Pages = (int)e.Element("Pages"),
Price = (decimal)e.Element("Price"),
Author = (string)e.Element("Author"),
});
Демонстрационная скрипка здесь .