LINQ анализирует XML-файл и получает значения от определенных узлов - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть XML-файл, и я пытаюсь извлечь данные из определенных узлов. Но есть узлы, которые отсутствуют, поэтому я хочу вернуть пустую строку. Ниже приведен пример моего кода, я использую LINQ.

string xml = @"<root>
                <employee>
                 <name>Val1</name>
                 <age>30</age>
                </employee>
                <employee>
                 <name>Val1</name>
                 <age>30</age>
                 <position>Priest</position>
                </employee>
               </root>";             

   XElement x = XElement.Parse(xml);
   IEnumerable<XElement> details = x.Elements();
   var valLst = (from el in details 
                 where el.Element("name").Value.Equals("Val1") 
                 select el.Value).ToList();

Объект Details содержит 2 узла-сотрудника с их дочерними узлами, поэтому я хочу взять значения дочерних узлов на основе значения имени узла. Также я хочу вернуть пустую строку для отсутствующих узлов (в примереузел позиции отсутствует в первом разделе, но существует во втором)

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

это даст вам IEnumerable<AnonymousType>

             var valLst =(from el in details 
             select new
             {
                 Name = el.Element("name").Value,
                 Position = el.Element("position")?.Value ?? ""
             });

Вывод:

      "{ Name = Val1, Position =  }"
      "{ Name = Val1, Position = Priest }"`
0 голосов
/ 13 декабря 2018

Вот ваш рабочий пример.Вы можете перейти отсюда

string xml = @"<root>
            <employee>
             <name>Val1</name>
             <age>30</age>
            </employee>
            <employee>
             <name>Val1</name>
             <age>30</age>
             <position>Priest</position>
            </employee>
           </root>";             

XElement x = XElement.Parse(xml);
IEnumerable<XElement> details = x.Elements();
var valLst = (from el in details 
             let pos = (el.Element("position") == null ? string.Empty : el.Element("position").Value)
             where el.Element("name").Value.Equals("Val1") 
             select new {n = el.Value, p = pos}).ToList();

Console.WriteLine(valLst[0].n + " - " + valLst[0].p);
Console.WriteLine(valLst[1].n + " - " + valLst[1].p);

вывод:

Val130 -
Val130Priest - Priest

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