检查动态元素中的null

本文关键字:null 元素 动态 检查 | 更新日期: 2023-09-27 18:08:56

我正在将字符串加载到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)) ? ...

检查动态元素中的null

需要稍微修改一下:

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() : "" );

我不知道这是不是最好的方法,但它确实有效。