ссылка на определенную часть xml-документа

#c# #xml #linq

#c# #xml #linq

Вопрос:

Я работаю с XML-документом и извлекаю определенные его части для создания нового объекта. Я имел дело с переходом к номеру документа и дате (свойства appNumber и appDate соответственно). Однако я не смог перейти к имени заявителя.

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

введите описание изображения здесь

введите описание изображения здесь

 var myCase = from theCases in allCasesXML.Descendants("exchange-document")
             select new case_
             {
                 appNumber = (string)theCases.Element("bibliographic-data").Element("application-reference").Element("document-id").Element("doc-number"),
                 appDate = (from p in theCases.Descendants("application-reference").Descendants("document-id")
                            where ((string)p.Attribute("document-id-type") == "epodoc") amp;amp; (p.Element("date") != null)
                            select (p.Element("date").Value)).FirstOrDefault(),
                 applicant = (string)(from q in theCases.Descendants("applicants").Descendants("applicant")//.Descendants("applicant-name")
                              where ((string)q.Attribute("data-format") == "original") amp;amp; (q.Element("name") != null)
                              select (q.Descendants("name")).FirstOrDefault().Value.FirstOrDefault())
                 //                          title = "",
                 //                          pubNumber = "",
                 //                          pubDate = ""
             };
 

Комментарии:

1. Почему бы вам просто не де-сериализовать его в объект? Вы можете использовать функцию VS «Вставить специальное», чтобы получить классовое представление вашей XML-структуры, готовое к десериализации. Вы избегаете этого ужасного запроса LINQ to XML и приступаете к работе со строго типизированным объектом.

Ответ №1:

Это дало ответ:

       applicant = (from q in theCases.Descendants("applicants").Descendants("applicant")//.Descendants("applicant-name")
      where ((string)q.Attribute("data-format") == "original")// amp;amp; (q.Element("name") != null)
      select q.Value).FirstOrDefault()