yi01.memo
2008-01-21
最終更新:
yi01memo
-
view
C#でXMLを読むときの注意
バグ! ChildNodes の使用には要注意!
バグじゃなくてこういう仕様なのかもしれませんが、
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>タグ2つにしてやったら、list.Countはしっかり4になりました。
さらに迷惑なことに、コメントアウトされたノードはnullなのですが、それに対してToStringだのNextSiblingだのしても、エラーを出してくれません。
「nd.InnerXML=""」が唯一の手がかりのようです。
これを見つけるのに4時間近く無駄にした。
この大事な時期に・・・!
これを見つけるのに4時間近く無駄にした。
この大事な時期に・・・!