C# linq到xml文档的特定部分

C# linq到xml文档的特定部分,c#,xml,linq,C#,Xml,Linq,我正在处理一个XML文档,并提取其中的特定部分来创建一个新对象。我已经处理了导航到文档编号和日期(分别是appNumber和appDate属性)的问题。但是,我无法找到申请人的姓名 通过在运行时查看局部变量,我可以看到我已经成功地导航到了正确的元素,但是我似乎无法从中获得名称值 var myCase = from theCases in allCasesXML.Descendants("exchange-document") select new case_

我正在处理一个XML文档,并提取其中的特定部分来创建一个新对象。我已经处理了导航到文档编号和日期(分别是appNumber和appDate属性)的问题。但是,我无法找到申请人的姓名

通过在运行时查看局部变量,我可以看到我已经成功地导航到了正确的元素,但是我似乎无法从中获得名称值

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") && (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") && (q.Element("name") != null)
                              select (q.Descendants("name")).FirstOrDefault().Value.FirstOrDefault())
                 //                          title = "",
                 //                          pubNumber = "",
                 //                          pubDate = ""
             };


这就提供了答案:

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

为什么不将它反序列化为一个对象呢?您可以使用VS“Paste special”功能来获取XML结构的类表示,该类表示已准备好进行反序列化。您可以避免可怕的LINQ到XML查询,并开始使用强类型对象。