Linq to XML获取outageEvent属性与元素及空引用异常解决
错误原因
你要查询的comments等直属子元素和outageEvent节点同属http://www.multispeak.org/Version_4.1_Release命名空间,你查询子元素时没有携带命名空间,导致Element("comments")匹配不到节点返回null,访问.Value属性时触发空引用异常。
修复代码
查询子元素时带上你已经声明的oecn命名空间即可,同时建议用(string)强转的方式替代直接访问.Value,可以避免节点不存在时抛出异常:
var alloutages = from outage in outages.Descendants(oecn + "outageEvent") select new { outageID = (string)outage.Attribute("objectID"), comments = (string)outage.Element(oecn + "comments"), // 其他需要提取的直属子元素都按此格式加命名空间即可 objectName = (string)outage.Element(oecn + "objectName") };
如果不需要硬编码字段,想动态遍历所有直属子元素(跳过extensionsList避免读取孙节点)可以用如下写法:
foreach (var outage in outages.Descendants(oecn + "outageEvent")) { // 先取objectID string outageId = (string)outage.Attribute("objectID"); // 遍历所有直属子节点,过滤掉extensionsList foreach (var childNode in outage.Elements().Where(n => n.Name.LocalName != "extensionsList")) { string fieldName = childNode.Name.LocalName; string fieldValue = (string)childNode; // 此处可自行处理字段映射,存入数据库 } }
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

