我正在将一个字符串加载到一个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}
如果这不是检查节点是否存在的正确方法,那是什么?请提前通知和thanx。
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 :(得分: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() : "" );
不知道这是不是最好的方法,但它确实有用。