アットウィキロゴ
yi01.memo
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

yi01.memo

2008-01-21

最終更新:

yi01memo

- view
管理者のみ編集可

C#でXMLを読むときの注意

バグ! ChildNodes の使用には要注意!

バグじゃなくてこういう仕様なのかもしれませんが、
ChildNodes関数はぼくの意に反した働きをしてくれます。

サンプルコード

...(前略)
<now> ←ここがカレントノードとします
 <nd id="0">
  <a>ああ0</a>
  <a>ここを読みたい</a>
 </nd>
 <!-- コメントアウトしています
 <nd id="1">
  <a>ああ1</a>
  <a>ここを読みたい</a>
 </nd>
 -->
 <nd id="2">
  <a>ああ2</a>
  <a>ここを読みたい</a>
 </nd>
</now>

変な動きをするコード

XmlNodeList list = (カレントノード).ChildNodes;
Console.WriteLine(list.Count); →3
for(int i=0;i<list.count;i++){
 XmlNode nd = list[i];
 Console.WriteLine(nd.NextSibling.innerXML); →ループは2回目でとまる。システムもとまる?
}

どうも、コメントアウトした部分も読んでるっぽいです。
コメントアウトの中を<nd>タグ2つにしてやったら、list.Countはしっかり4になりました。
さらに迷惑なことに、コメントアウトされたノードはnullなのですが、それに対してToStringだのNextSiblingだのしても、エラーを出してくれません。

nd.InnerXML=""」が唯一の手がかりのようです。
これを見つけるのに4時間近く無駄にした。
この大事な時期に・・・!
記事メニュー
最近更新されたスレッド
ウィキ募集バナー