我正在尝试使用XMLNode从xml文件中读取多个属性,但是根据元素,该属性可能不存在。如果该属性不存在,如果我尝试将其读入内存,则会抛出一个null异常。我找到了一种方法来测试该属性是否返回null:
var temp = xn.Attributes["name"].Value;
if (temp == null)
{ txtbxName.Text = ""; }
else
{ txtbxName.Text = temp; }
这似乎适用于单个实例,但如果我检查可能不存在的20个属性,我希望有一种方法可以设置一个方法,我可以传递值来测试它是否为null。从我读过的内容来看,你无法传递var,因为它是在本地初始化的,但有没有办法我可以设置一个测试来传递一个可能为空的值进行测试,然后返回值,如果它不是null,并返回“”如果它是空的?是否有可能,或者我是否必须如上所述单独测试每个值?
答案 0 :(得分:2)
您可以创建一个这样的方法:
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");
答案 1 :(得分:0)
如果你使用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\"");