XMLの複数データの取り扱い

解決


タメ子  2007-04-13 20:37:01  No: 136055

VB6でXMLファイルからデータを取得するところで上手く行きません。

XML・・・
=================================================
<A>
    <B>
        <C X="0" y="0" />
    </B>
</A>
<A>
    <B>
        <C X="1" y="1" />
    </B>
</A>
<A>
    <B>
        <C X="2" y="2" />
    </B>
</A>

=================================================

プログラム

    Dim i As Integer
    Dim XMLDocument As DOMDocument40
    Dim xmlTarget_1 As IXMLDOMNodeList
    Dim xmlTarget_2 As IXMLDOMNodeList

    Set XMLDocument = CreateObject("MSXML2.DOMDocument.4.0")

    Set xmlTarget_1 = XMLDocument.selectNodes("//A")

    For i = 0 To 3 - 1 Step 1
        Set xmlTarget_2 = xmlTarget_1.Item(i).selectNodes("//B")
    Next i

このプログラムで、i=0 の1回目のループでxmlTarget_2は、

【私の思い】
1つ目の<A>内の<B>がitemとして取れる
    xmlTarget_2.length = 1
ですが、

【実際】
    xmlTarget_2.length = 3
となって、全ての<A>の中の<B>が取得されます。

後の、i=1、i=2も同じ値でした。

この例で3つある<A>をループの中で、それぞれの<B>を取りたいのですが、
間違いの指摘と、解決策を教えて下さい。


Hongliang  URL  2007-04-13 21:07:27  No: 136056

"//XXX" は、ドキュメントルートの XXX という名前を持つ子孫エレメント全てが対象になります。
コンテキストノード以下の子孫エレメントを対象としたいなら、コンテキストノードをちゃんと示して ".//XXX" とする必要があります。

// 子孫エレメントじゃなくて子エレメントで十分だと思います。


タメ子  2007-04-13 22:09:24  No: 136057

Hongliangさん

御指摘頂いたことを反映して上手く行く事ができました。
ありがとうございました。

構文のそれぞれの意味をしっかりと把握することなく、参考にしていた
ものを応用して使用していた為に、このような質問となってしまいました。
申し訳ありませんでした。


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




  


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