2

考虑这个 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());

但我得到这个错误:

序列不包含任何元素

问题在哪里?

谢谢

4

2 回答 2

3

您查找"td"元素,但在节点的顶层您只能找到一个"tr"元素。这就是为什么你没有得到任何元素。试试这个:

from c in info.Elements("tr").Elements("td")

此外,您应该在调用之前检查序列中是否有任何元素First()(如果没有元素,则使用FirstOrDefault()which 返回 null )。

如果您不知道路径并且只想要"td"具有该标记值的所有元素,您还可以使用Descendants扩展方法:

from c in info.Descendants("td")
于 2012-09-11T06:36:48.830 回答
0

Elements在这种情况下,将为您提供根的直接子元素信息。您需要深入到您要查找的元素,然后通过Where子句提取它们。在您的情况下,直系子女是<tr>s。

于 2012-09-11T06:39:48.987 回答