

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を取得するにはどうすれば良いのでしょうか。
ヒントでも良いので、皆様の知恵をお借りできれば幸いです。
よろしくお願い致します。
No.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 )
といった具合でしょう ・・・ 各変数の宣言などは行ってください
早速の回答ありがとうございます!!
教えていただいたやり方できました。
一旦オブジェクトを取得しないといけないんですね。
本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「取得先」という表現について
-
ps3で久しぶりにCDの音楽情報取...
-
ASPでIPアドレスの逆引きした結...
-
INIファイル
-
format関数について
-
各クライアントマシンのログイ...
-
Yahoo! JAPAN IDを新規取得でき...
-
ローカルのコンピュータ名を取...
-
WebBrowserコンポーネントでリ...
-
EXCEL、マクロ-改ページ行番号...
-
ExcelVBAで、FileSystemObject...
-
VB.NETでボリュームを取得・設...
-
Excel VBA:特定の文字列以降(...
-
【VBA】EXCELブックを開かずに...
-
PHPを使って、別サイトの一部を...
-
VBS「開いているページ」のURL...
-
(Win32)ファイルパスから物理ド...
-
iphlpapiのGetAdaptersInfoでNI...
-
VB+SQLserverでRecordCount問題
-
【PHP】APIやRSSが存在しないサ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「取得先」という表現について
-
Excel VBA:特定の文字列以降(...
-
コンビニで住民票を取得した場...
-
EXCEL、マクロ-改ページ行番号...
-
Yahoo! JAPAN IDを新規取得でき...
-
ps3で久しぶりにCDの音楽情報取...
-
スクレイピングに適した言語を...
-
VB+SQLserverでRecordCount問題
-
format関数について
-
IPアドレスとMACアドレスを取得...
-
VBAでPDFのアクティブページ番...
-
PHPを使って、別サイトの一部を...
-
【VBA】EXCELブックを開かずに...
-
IPアドレス変更方法
-
VB.NETでボリュームを取得・設...
-
ログイン処理を自動で行い、目...
-
VB2005でXMLデータから複数ある...
-
curlで取得出来るデータの制限...
-
グーグルページランクの取得方法
-
アメブロでテーマを指定したRSS...
おすすめ情報