IXMLNodeのChildNodesでアクセス違反

解決


  2009-11-02 19:46:49  No: 36064

TXMLDocumentを使用してXMLの入出力を行おうとしております。

あるタグ内に同じ名前のタグが並び、Attributeで区別しようとして
<IDDefs>
  <IDDef ID="ID0">
    ・・・
  </IDDef>
  <IDDef ID="ID1">
    ・・・
  </IDDef>
  ・
  ・
  ・  
</IDDefs>

の様な構成を想定しています。出力はうまくいきましたが、
入力時、(IDDefsNode: IXMLNode)
 IDDefsNode := ParentNode.ChildNodes.FindNode('IDDefs');
ここまではうまくいくのですが、(IDDefsNodes: IXMLNodeList)
 IDDefsNodes := IDDefsNode.ChildNodes;

ここのChildNodesが「00000000 で 00000000 のアクセス違反」と出て
ChildNodesプロパティがアクセスできません。
原因、対策等ご存じの方がいらっしゃいましたらご教授願います。


igy  2009-11-02 22:00:15  No: 36065

> IDDefsNode := ParentNode.ChildNodes.FindNode('IDDefs');

GetNode メソッド が nil を返しているとかでは、ないですよね・・・


  2009-11-02 22:22:55  No: 36066

igyさん、早速の返信ありがとうございます。
IDDefsNode自体はnilではありません。デバッガで見ても
きちんとアドレスが表示されており、HasChildNodesプロパティ
もtrueとなっています。XMLプロパティもきちんと取り込めている
ようですしGetChildNodes関数が行方しれずとなっている感じです。


  2009-11-03 02:32:37  No: 36067

自己解決です。

IDDefタグが14個以上ある時、ChildNodesがアクセス違反となっていました。
結論としてはTXMLDocumentの生成時、引数(オーナー)をnilにしており、
オーナーをXML操作を行うフォームにすれば問題なく動作しました。

両者の違いが全く分からずまた<IDDefs>タグと同レベルのタグ(これももち
ろんその上のレベルのChildNodesです)のNodeValue等は問題なく読めていた
ので全くそこを怪しむ事はしていませんでした。

解決はしましたが、なんだか腑に落ちない感じでした。
igyさんありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加