如何检查XML属性是否包含字符串?

时间:2015-03-16 15:53:06

标签: c# xml linq

这是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"))

如果属性包含某些内容,我如何检查它?

2 个答案:

答案 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有效吗?

相关问题