Как получить узел XML на основе значения узла-брата? - PullRequest
1 голос
/ 10 марта 2019

Я работаю над приложением .Net, для которого мне нужно извлечь значения из файла XML на основе значения значения его узла-брата. Например: здесь, в XML, я хочу получить значения в Pages, Price &Автор основан на названии "Гензель и Гретель".

<?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>

1 Ответ

1 голос
/ 10 марта 2019

Вместо того, чтобы искать братьев и сестер, вы можете искать все родительские элементы <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"),
            });

Демонстрационная скрипка здесь .

...