#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()