【问题标题】:How to check multiple XMLNode Attributes for Null Value?如何检查多个 XMLNode 属性的空值?
【发布时间】: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。

标签: c# xml null xmlnode


【解决方案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\"");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多