C# 通过它获取节点';linqtoxml中的s属性
考虑以下HTML:C# 通过它获取节点';linqtoxml中的s属性,c#,asp.net,linq,c#-4.0,linq-to-xml,C#,Asp.net,Linq,C# 4.0,Linq To Xml,考虑以下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="
<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>
现在我想获取所有具有align=“right”的td,并编写以下代码:
var elementToChange = (from c in info.Elements("td")
where c.Attribute("align").Value == "right"
select c);
Label1.Text = Server.HtmlEncode(elementToChange.First().ToString());
但我得到了这个错误:
序列不包含任何元素
问题在哪里
谢谢您可以查找“td”
元素,但在节点的顶层,您只能找到“tr”
元素。这就是为什么你没有得到任何元素。试试这个:
from c in info.Elements("tr").Elements("td")
此外,在调用First()
(或者使用FirstOrDefault()
,如果没有元素,则返回null),您应该检查序列中是否有任何元素
如果您不知道路径,并且只希望所有“td”
元素都具有该标记值,则还可以使用扩展方法:
from c in info.Descendants("td")
Elements
将在本例中为您提供根目录的直接子元素。您需要深入到要查找的元素,然后通过Where
子句提取它们。在你的情况下,直系儿童是<代码> /代码> S.谢谢它。但是我们不知道这条路。是否存在返回任何路径中的所有节点的方法?thta具有特定值的特定属性?@Kerezo是的,子体
方法会这样做。请参阅我的编辑。
from c in info.Descendants("td")