1

私が取り組んでいるアプリケーションには、クエリのためにメモリにロードする必要がある XML ドキュメントがあります。これを行うために、正常に動作している を呼び出しXmlDocument.Load(string path)ています。しかし、最近、メソッドで奇妙な動作に遭遇しました。

次のような生成されたファイルがあります (機密データを削除するために編集されています)。

*Snip*
<Info name="name2" parent="name1" modifier="A"/>
<Info name="name2" parent="name1" modifier="B"/>
<Info name="name1" modifier="A"/>
<Info name="name1" modifier="B"/>
<Info name="name3" parent="name2" modifier="A"/>
<Info name="name3" parent="name2" modifier="B"/>
*Snip*

上記の 6 つのエントリがあります。ただし、 を呼び出すとXmlDocument.Load、4 つのエントリのみがロードされ、最初の 2 つのエントリは除外されます。ブレークポイントを使用してこれを確認し、データ デバッガーを調べました。

ただし、ドキュメント内のデータを手動で再配置すると、

*Snip*
<Info name="name1" modifier="A"/>
<Info name="name1" modifier="B"/>
<Info name="name2" parent="name1" modifier="A"/>
<Info name="name2" parent="name1" modifier="B"/>
<Info name="name3" parent="name2" modifier="A"/>
<Info name="name3" parent="name2" modifier="B"/>
*Snip*

すべてのデータが正しくロードされ、どの要素も取り残されていません。私が知る限り、ドキュメントは整形式で、読み込み時にスローされる例外はありません。また、すべてのエントリに人為的にparent属性を追加すると、それらはすべて正しく読み込まれますが、XML を正しく理解していれば、それは問題ではなく、コード内の欠落している属性を無効にするだけであることに注意してください。また、どの要素にも名前空間が指定されていません。

これは予想される動作ですか、それとも何か不足していますか? 必要に応じて詳細をお知らせします。

4

1 に答える 1

1

私はあなたの例をそのように試しました:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<root><Info name=\"name2\" parent=\"name1\" modifier=\"A\"/><Info name=\"name2\" parent=\"name1\" modifier=\"B\"/><Info name=\"name1\" modifier=\"A\"/><Info name=\"name1\" modifier=\"B\"/><Info name=\"name3\" parent=\"name2\" modifier=\"A\"/><Info name=\"name3\" parent=\"name2\" modifier=\"B\"/></root>");
int count = doc.SelectNodes("//root/Info").Count;

そして、それはうまくいきました。正しい数値である 6 という値が返されました。自分で試してみてください。同じように動作しない場合は、インストールに問題があるはずです。しかし、私が推測するように、それがあなたにとって同じように機能する場合、問題は別のものに違いありません.

小さく始めて、失敗するまで複雑さを増してみてください。XML に問題があるか、XmlDocument オブジェクトからノードを読み取る方法にバグがあります。

于 2012-06-04T15:53:32.510 に答える