人生最悪の忘れ物

VB2005、XML の初心者です。

VB2005でXMLデータをMSXMLで解析していますが、下記のようなXMLの場合、Itemがうまく解析できません。
Module > Parent > Item という親子関係ですが、
全て数は可変です。(子がない場合もあります。)

<Body>
<Content>
<Module>
</Module>
<Module>
<Parent>
<Item>A</Item>
</Parent>
</Module>
<Module>
<Parent>
<Item>AA</Item>
<Item>BB</Item>
<Item>CC</Item>
</Parent>
</Module>
<Module>
</Module>
</Content>
</Body>

ソースは下記です。

Dim LmsxmlDoc As MSXML2.DOMDocument
LmsxmlDoc = New MSXML2.DOMDocument
LmsxmlDoc.LoadXml(XMLData)

Dim LModules As MSXML2.IXMLDOMNodeList
'下記Moduleは取得できる
LModules = LmsxmlDoc.SelectNodes("/Body/Content/Module")

Dim LItems As MSXML2.IXMLDOMNodeList

Dim LmsxmlModule As MSXML2.DOMDocument
LmsxmlModule = New MSXML2.DOMDocument

For Each LModule As MSXML2.IXMLDOMNode In LModules

'下記(1)でも(2)でもItemが取得できない
(1)LItems = LModule.selectNodes("/Module/Parent/Item")

LmsxmlModule.LoadXml(LModule.Xml)
(2)LItems = LmsxmlModule.selectNodes("/Module/Parent/Item")

For Each LItem As MSXML2.IXMLDOMNode In LItems
'処理
Next

Next

上記ソースでは、(1)、(2)のどちらの方法でもなぜかItemが取得できません。
Itemを取得するにはどうすれば良いのでしょうか。

ヒントでも良いので、皆様の知恵をお借りできれば幸いです。
よろしくお願い致します。

A 回答 (1件)

存在したりしなかったりならその実情に合わせて オブジェクトを取得しないといけないようです



Moduleまで存在が確実なら selectNodes("/Body/Cotent/Module")で取得は出来ますよね
これ以後ですが
ModuleレベルのDOMDocument … docModule
ParentレベルのDOMDocument … docParent
ItemレベルのDOMDocument  … docItem
の3種類が必要だともいます
docModule.loadXML( LModule.xml )
でDOMDocumentを取得
' Parentのリストを取得
oParentList = docModule.selectNodes("/Module/Parent")
if oParentList.Length then
  ' Parentのノードを取得
  For each oParentNode in oListParent
    ' ノードをドキュメントへ
    docParent.loadXML( oParentNode.xml )
    ' Itemリストを取得
    oItemList = docParent.selectNodes("/Parent/Item")
    If oItemList.Length then
      ' Itemノードを取得
      for each oItemNode in oListItem
        MsgBox( oItemNode.Text )

といった具合でしょう ・・・ 各変数の宣言などは行ってください
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます!!

教えていただいたやり方できました。
一旦オブジェクトを取得しないといけないんですね。

本当にありがとうございました!

お礼日時:2007/11/15 18:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報