如何检查多个 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 则返回该值,然后返回"" 如果它为空?是否有可能,或者我是否必须如上所述单独测试每个值?

【问题讨论】:

你为什么使用XmlDocumentLinq2XML 是更好的选择。 我开始使用 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 属性的空值?的主要内容,如果未能解决你的问题,请参考以下文章

C#,多个 == 运算符重载,没有模棱两可的空值检查

如何检查 var 的空值?

我如何创建一个实用函数来检查来自 CSV 的空值并替换为打印 NULL

如何修复颤振中的“未处理的异常:用于空值的空检查运算符”错误?

如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”

如何在 BigQuery 中将多个列的空值替换为 0?