好吧,使用.NET 3.5和XDocument我试图找到<table class='imgcr'>
元素。我创建了下面的代码但当然崩溃了,因为e.Attribute("class")
可能为null。那么......我必须在任何地方进行无效检查?这将加倍e.Attribute("class")
。根本不是简洁的解决方案。
XElement table =
d.Descendants("table").
SingleOrDefault(e => e.Attribute("class").Value == "imgcr");
答案 0 :(得分:2)
如果您确定因为table
元素可能没有class
属性而引发异常,那么您可以这样做:
XElement table =
d.Descendants("table").
SingleOrDefault(e => ((string)e.Attribute("class")) == "imgcr");
在这种情况下,您将null
值转换为string
,最后为null
,因此您要比较null == "imgcr"
,false
}。
如果您需要有关如何检索属性值的更多信息,可以查看此msdn page。在那里你会发现这个肯定:
您可以将
XAttribute
转换为所需类型;明确的 转换运算符然后转换元素的内容或 属性为指定的类型。
答案 1 :(得分:0)
我想这很短暂
XElement table =
d.Descendants("table").
SingleOrDefault(e => { var x = e.Attribute("class"); return x==null ? false: x.Value == "imgcr";});
这个更短(但不多 - 除非你可以重复使用t变量。)
XAttribute t = new XAttribute("class","");
XElement table =
d.Descendants("table").
SingleOrDefault(e => (e.Attribute("class") ?? t).Value == "imgcr");