这是XML(我已经保存了一个xml格式的html页面来解析它:
<td width="76" class="DataB">2.276</td>
<td width="76" class="DataB">2.289</td>
<td width="76" class="DataB">2.091</td>
<td width="76" class="DataB">1.952</td>
<td width="76" class="DataB">1.936</td>
<td width="76" class="Current2">1.899</td>
现在我正在尝试查找包含字符串Current的所有元素,因为网页会更改背面的数字:
var xElements = xml.Descendants("td").Where(element => ((string) element.Attribute("class")).Contains("Current"));
这会在此处返回object does not exist
错误:
((string) element.Attribute("class"))
如果属性包含某些内容,我如何检查它?
答案 0 :(得分:4)
如果你问我,写一个xpath查询会更容易。这样您就不必处理元素不包含类属性和其他此类情况的情况。
var query = xml.XPathSelectElements("//td[contains(@class,'Current')]");
否则,在尝试阅读之前,您必须检查属性是否存在。
// query syntax makes this a little nicer
var query =
from td in xml.Descendants("td")
let classStr = (string)td.Attribute("class")
where classStr != null && classStr.Contains("Current")
select td;
// or alternatively, provide a default value
var query =
from td in xml.Descendants("td")
where ((string)td.Attribute("class") ?? "").Contains("Current")
select td;
答案 1 :(得分:0)
您正在使用的XML输入可能有问题 - 尝试此代码在LINQPad中适用于我:
XDocument xml = XDocument.Parse(@"<tr><td width=""76"" class=""DataB"">2.276</td>
<td width=""76"" class=""DataB"">2.289</td>
<td width=""76"" class=""DataB"">2.091</td>
<td width=""76"" class=""DataB"">1.952</td>
<td width=""76"" class=""DataB"">1.936</td>
<td width=""76"" class=""Current2"">1.899</td></tr>");
var xElements = xml.Descendants("td").Where(element => ((string) element.Attribute("class")).Contains("Current"));
xElements.Dump();
您确定您的XML有效吗?