如何检查多个 XMLNode 属性的空值?
Posted
技术标签:
【中文标题】如何检查多个 XMLNode 属性的空值?【英文标题】:How to check multiple XMLNode Attributes for Null Value? 【发布时间】:2014-03-31 21:01:43 【问题描述】:我正在尝试使用 XMLNode 从 xml 文件中读取多个属性,但根据元素的不同,该属性可能不存在。如果该属性不存在,如果我尝试将其读入内存,它将抛出一个空异常。我找到了一种测试属性是否返回 null 的方法:
var temp = xn.Attributes["name"].Value;
if (temp == null)
txtbxName.Text = "";
else
txtbxName.Text = temp;
这似乎适用于单个实例,但如果我检查 20 个可能不存在的属性,我希望有一种方法可以设置一个方法,我可以传递值来测试它是否为空。从我读过的内容来看,您无法传递 var,因为它是本地初始化的,但是有没有办法可以设置测试以传递要测试的潜在 null 值,然后如果它不为 null 则返回该值,然后返回"" 如果它为空?是否有可能,或者我是否必须如上所述单独测试每个值?
【问题讨论】:
你为什么使用XmlDocument
? Linq2XML
是更好的选择。
我开始使用 xml 解析,并且能够比 LINQtoSQL 更轻松地使用 XMLDocument。
【参考方案1】:
你可以像这样创建一个方法:
public static string GetText(XmlNode xn, string attrName)
var attr = xn.Attributes[attrName];
if (attr == null). // Also check whether the attribute does not exist at all
return string.Empty;
var temp = attr.Value;
if (temp == null)
return string.Empty;
return temp;
然后这样称呼它:
txtbxName.Text = GetText(xn, "name");
【讨论】:
【参考方案2】:如果您使用XDocument
,您可以只使用 Linq 来查找您想要的所有节点。
var names = (from attr in doc.Document.Descendants().Attributes()
where attr.Name == "name"
select attr).ToList();
如果您出于某种原因使用XmlDocument
,您可以使用 XPath 选择您想要的节点。 (我的 XPath 生锈了)。
var doc = new XmlDocument();
doc.Load("the file");
var names = doc.SelectNodes("//[Name=\"name\"");
【讨论】:
以上是关于如何检查多个 XMLNode 属性的空值?的主要内容,如果未能解决你的问题,请参考以下文章
我如何创建一个实用函数来检查来自 CSV 的空值并替换为打印 NULL
如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?