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()、要素がない場合は null を返す which を使用します)。

パスがわからず"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 に答える