2014-06-17 55 views
0

我加載一個字符串轉換成XML元素,並已經制定了什麼,我以爲有什麼足夠的錯誤檢查,但是,如果一個特定的XML節點心不是目前它仍然拋出一個錯誤檢查在動態元素空

StackTrace "at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)\r\n 
at MvcApplication1.Controllers.MyController.MySearch(SearchModel s) 
in c:\\...Controller.cs:line 2900" string e {"Sequence contains no elements"} 
System.Exception {System.InvalidOperationException} 

如果這不是檢查節點存在的正確方法,那是什麼?請提前告知並告知。

 XmlDocument doc = new XmlDocument(); 
      doc.LoadXml(mytextstring); 
      XDocument docx = DocumentToXDocumentReader(doc); 
    ... 
      try 
      { 
       foreach (XElement xe in docx.Descendants("RootElement")) 
       { 

        MySearchModel jbcs = new MySearchModel(); 

        jbcs.ID = xe.Attribute("SID").Value;       
        ... 
        jbcs.FirstName = (xe.Element("PersonalData").Element("Name").Element("First") == null) ? "" : 
        xe.Element("PersonalData").Element("Name").Element("First").Value.Trim(); 

        jbcs.LastName = (xe.Element("PersonalData").Element("Name").Element("Last") == null) ? "" : 
        xe.Element("PersonalData").Element("Name").Element("Last").Value.Trim(); 

        jbcs.HomeLocation = (xe.Element("PersonalData").Element("Address").Element("Location") == null) ? "" : 
        xe.Element("PersonalData").Element("Address").Element("Location").Value.Trim(); 
     ... 
     } 
    } 

這並不工作之一:

jbcs.FirstName = (xe.Element("PersonalData").Element("Name").Element("First").Equals(null)) ? ... 

回答

0

不得不修改了一點:

bool hasCompany = xe.Element("Experiences").DescendantsAndSelf("Experience").Descendants("Company").Any(); 
jbcs.RecentEmployer = (hasCompany ? xe.Element("Experiences").DescendantsAndSelf("Experience").Descendants("Company").First().Value.Trim() : ""); 
bool hasJobTitle = xe.Element("Experiences").DescendantsAndSelf("Experience").DescendantsAndSelf("Job").Descendants("Title").Any(); 
jbcs.RecentJobTitle = (hasJobTitle ? xe.Element("Experiences").Element("Experience").DescendantsAndSelf("Job").Descendants("Title").First().Value.Trim() : ""); 

不知道這是否是最好的方式,但它的工作原理。