考虑这个HTML:
<table>
<tr>
<td width="45%" align="right">
<h2>1.00 NZD</h2>
</td>
<td valign="top" align="center">
<h2>=</h2>
</td>
<td width="45%" align="left">
<h2>0.415528 GBP</h2>
</td>
</tr>
</table>
我将此代码用作字符串并将其转换为XML
文件:
string raw = "<table><tr><td width=\"45%\" align=\"right\"><h2>1.00 NZD</h2></td><td valign=\"top\" align=\"center\"><h2>=</h2></td><td width=\"45%\" align=\"left\"> <h2>0.415528 GBP</h2> </td></tr></table>";
XElement info = XElement.Parse(raw);
现在我想获得All td that have align="right"
并编写此代码:
var elementToChange = (from c in info.Elements("td")
where c.Attribute("align").Value == "right"
select c);
Label1.Text = Server.HtmlEncode(elementToChange.First().ToString());
但是我得到了这个错误:
序列不包含元素
哪里有问题?
感谢
答案 0 :(得分:3)
您查找"td"
元素,但在节点的顶层只能找到"tr"
元素。这就是为什么你没有得到任何元素。试试这个:
from c in info.Elements("tr").Elements("td")
此外,您应该在调用First()
之前检查序列中是否有任何元素(或使用FirstOrDefault()
如果没有元素则返回null。)
如果您不知道路径并且只想要具有该标记值的所有"td"
元素,您还可以使用Descendants
扩展方法:
from c in info.Descendants("td")
答案 1 :(得分:0)
Elements
会在这种情况下为您提供root的直接子元素。您需要深入查看要查找的元素,然后通过Where
子句提取它们。在您的情况下,直接的孩子是<tr>
。