VB2005でXMLから要素の項目取得方法

このQ&Aのポイント
  • VB2005の初心者ですが、XMLから複数の要素の項目を取得する方法について教えてください。
  • msxmlDocとして引数で渡されるXMLには、「ヤマダタロウ」「山田太郎」などの要素がありますが、selectNodesで取得する方法がうまくいきません。
  • 「/Module/Body/Item[@Code='A'][@tableId='001']/Name」というパスを指定していますが、何か間違っているでしょうか。ご教示ください。
回答を見る
  • ベストアンサー

VB2005でXMLから複数ある要素の項目を取得する方法

VB2005、XMLの初心者です。 下記XMLの「ヤマダタロウ」を抽出するのがうまくいきません。 <Module> <Body> <Item Code= A TableId=001> <Name>ヤマダタロウ</Name> </Item> <Item Code= B TableId=001> <Name>山田太郎</Name> </Item> </Body> </Module> 上記XMLがmsxmlDocとして引数で下記プロシージャに渡されるのですが、selectNodesではなぜか取得できません。 どこか間違っているでしょうか。 Private Sub prvParseXML(Byval msxmlDoc As MSXML2.DOMDocument) Dim NodeList As MSXML2.IXMLDOMNodeList NodeList = msxmlDoc.selectNodes("/Module/Body/Item[@Code='A'][@tableId='001']/Name") End Sub 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

noname#51596
noname#51596

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

XMLファイルのItemの属性データが ""で括っていないからのようですよ MSXML4.0を参照設定しておいて dim xmlDoc as MSXML2DomDocument ' 『"』が無いとここで失敗して selectNodesまで行かない if xmlDoc.load("ファイルパス") then   dim nList as MSXML2.IXMLNodeList   nList = xmlDoc.selectNodes("/Module/Body/Item[@Code='A'][@TableID='001']/Name")   if nList.Length > 0 then     MsgBox( nList(0).text )   end if end if <Item Code='A' TableId='001'> といった具合で『'』『"』などで括っておかないと面白くないようです

noname#51596
質問者

お礼

早速のお返事ありがとうございました。 『'』が足りなかったんですね。 初歩的なミスでしたが、本当にありがとうございました。

関連するQ&A

  • VB2005でXMLデータから複数ある要素の入れ子を取得する方法

    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を取得するにはどうすれば良いのでしょうか。 ヒントでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • VB2005でXMLデータの要素があるかどうかの判定について

    VB2005、XMLの初心者です。 XMLデータをMSXMLでパーサーにかけてから全項目を抽出していますが、要素は必須のものもあれば、省略される場合もあります。 下記の方法では、省略されている場合エラーとなってしまうのですが、 指定したパスの要素があるかどうか判定することはできないのでしょうか。 省略される可能性のある場合は、selectsingleNodeではなく、何か別の方法で項目を取得しなければならないのでしょうか。 Private Sub prvParseXML(Byval msxmlDoc As MSXML2.DOMDocument) Dim Item As String Dim TableId As String Item = msxmlDoc.selectsingleNode("/Mml/content/Module/Class/Code").Text TableId = msxmlDoc.selectsingleNode("/Mml/content/Module/Class/@tableId").Text End Sub 項目を抽出する方法は上記しか分からなかったのですが、 何かヒントになることでも良いので皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • VB2005でXMLデータから複数ある要素の数を読み取る方法

    VB2005、XMLの初心者です。 VB2005でXMLデータを読み取って、DBに登録するプログラムを作っています。 XMLデータから項目を読み取るのは、下記のようにパスを指定してできることが分りました。 CreatorInfodNode = xmlDoc.SelectNodes("/Mml/Body/Module", nsmgr1) ID = CreatorInfodNode(0).InnerText.Trim しかし、下記のような同じ要素が複数あるXMLデータの場合、全ての要素を解析してDBに登録したいのですが、要素の数はどうやって読み取れば良いのでしょうか。ちなみに、要素の数は可変です。 上記のパスを指定する場合、要素のタグが同じなら全てパスは同じになり、最初の要素を取ってくるようですが、複数ある場合は全てを解析したいです。 <Mml> <Body> <Module>A</Module> <Module>B</Module> <Module>C</Module> </Body> </Mml> 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • XMLの要素の内容の中に要素

    VisualBasic6.0にて、XMLを作成するプログラムを作っています。 XMLの作成、編集はMSXMLを使用しており、編集保存はできたのですが、下記のような要素の出力の仕方がわかりません。 <Node1>  あいうえお  <Node1-1>abcde</Node1-1>  かきくけこ </Node1> このように要素の文字列の途中に子要素を作成したいです。 「Node1」要素に、子要素「Node1-1」を追加するサンプルです。 Cドライブ直下に以下の内容のXMLファイル「test.xml」を作成 <?xml version="1.0" encoding="shift_jis"?> <Node1> </Node1> VB6にて、参照設定に「Microsoft XML V6.0」を追加し以下のコードを作成。 Private Sub Command1_Click() Dim xDoc As MSXML2.DOMDocument Set xDoc = New MSXML2.DOMDocument Dim node As IXMLDOMNodeList Dim Addnode As IXMLDOMNode Dim obj As IXMLDOMNode If xDoc.Load("C:\test.xml") Then Set node = xDoc.documentElement.selectNodes("/Node1") For Each obj In node Set Addnode = obj.appendChild(xDoc.createNode(NODE_ELEMENT, "Node1-1", "")) Addnode.Text = "abcde" Next xDoc.save ("C:\test.xml") End If Set xDoc = Nothing End Sub

  • VB2005でXMLのテキストデータをXMLデータにするには?

    VB2005の初心者です。 タグ付きのXMLのテキストデータを読み込んで、項目ごとにDBに登録したいのですが、やり方が分りません。 テキストデータをXMLデータ、もしくはノード、もしくはデータセット型に変換しなければならないと思うのですが、そのやり方を教えていただきたいです。 ちなみに、XMLデータをテキストデータにするのは下記のとおりでできました。この strText を逆にXMLデータに変換したいです。 Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:XMLData.xml") strText = xmlDoc.xml 何かヒントでも良いので、たくさんの方の知恵をお借りしたいです。

  • VB2005でXMLデータをParserを使って項目を抽出する方法

    VB2005の初心者です。 XMLデータをパーサーをかけて、特定の項目を抽出してDBに登録したいのですが、パーサーの機能(?)で特定の項目を抽出することはできるのでしょうか。 下記のように、msxmldocにLoadした後、タグ名で検索して特定の項目を抽出する方法はあるのでしょうか。 Dim msxmlDoc As MSXML2.DOMDocument msxmlDoc = New MSXML2.DOMDocument msxmldoc.Loadxml(strFullText) 何かヒントでも、他の方法でも、たくさんの方の知恵をお借りしたいです。よろしくお願い致します。

  • VBA でxmlの全要素・属性の読み込み

    お世話になります。 ExcelのVBAを使用して、xmlファイルの全要素・全属性を読み込み、 Excelに書き出したいと思っております。 ネットを参考に下記のソースで、全ての要素をエクセルに 書き出すことは、できたのですが、どうしても全属性を読み込むことが できません。 どのようにすればよいか教えて頂けないでしょうか? お手数ですがよろしくお願い致します。 -----------------ソース---------------- Sub main() Dim myxml As New DOMDocument40 Dim nodelist As IXMLDOMNodeList Dim onenode As IXMLDOMNode Dim i As Integer myxml.Load ("C:\Users\harada\Desktop\problem_info取り込み\problem_info.xml") Set nodelist = myxml.DocumentElement.ChildNodes i = 1 For Each onenode In nodelist Call submain(onenode, i, 1) i = i + 1 Next End Sub Sub submain(tmp As IXMLDOMNode, itmp As Integer, j As Integer) If tmp.HasChildNodes = False Then Exit Sub k = tmp.ChildNodes.Length For m = 0 To k - 1 Cells(itmp, j + m).Value = tmp.ChildNodes(m).Text Next j = j + m Set tmp = tmp.ChildNodes.NextNode Call submain(tmp, itmp, j) End Sub

  • VB.NETSystem.Xml 要素数を得るには

    VB.NETでSystem.Xmlを参照設定して以下のXMLファイル(test.xml)のsub4_9のtestの個数を得たいのですが domNode = domDoc.SelectSingleNode("top/sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????) というようにしましたが?????の部分にLengthやCountがありません。 また、 rootElement = domDoc.DocumentElement domNodeList = rootElement.GetElementsByTagName("sub4_9/test") Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count) というようにもしてみましたが個数は誤った0が返されます。 どのように記述すればsub4_9のtestの個数を得ることができるでしょうか。 ----test.xml------------- <top>  <sub1_1>   <test>123</test>   <test>451</test>    :  </sub1_1>    :  <sub4_9>   <test>432</test>   <test>123</test>   <test>745</test>    :  </sub4_9>    :  <sub9_5>   <test>222</test>    :  </sub9_5> </top> --VB.NET------------------------ Imports System.Xml Imports System.IO Module Module1  Sub Main()   Dim domDoc As New XmlDocument   Dim domNode As XmlNode   Dim domNodeList As XmlNodeList   Dim rootElement As XmlElement   domDoc.Load("test.xml")   rootElement = domDoc.DocumentElement   domNode = domDoc.SelectSingleNode("top/sub4_9/test")   Console.WriteLine("Count of top/sub4_9/test = " & domNode.?????)   domNodeList = rootElement.GetElementsByTagName("sub4_9/test")   Console.WriteLine("Count of top/sub4_9/test = " & domNodeList.Count)  End Sub End Module ----------------------------------- よろしくお願いします (WindpwsXP,VisualStudio2010)

  • Excel-VBAでXMLの複数ノードの取り出し

    すみません、いつも、いろいろな方に助けて頂いていますが、また、初歩的な質問をさせて頂きます。 Excel2007のVBAでXMLの扱いが良くわかっておりません。 以下のプログラムで複数ItemのASINを出力したいのですが、うまくいきません。 XMLがきちんと取得できているのはWireSharkでキャプチャして確認できております。 VBAで表示出力するのがうまくいきません。ご教授方よろしくお願いします。 selectSingleNodeで一つの場合はうまく取り出せています。複数ノードの場合にSelectNodesの使い方に問題がありますでしょうか? 型の宣言などに誤りがありますでしょうか? また、基本的なことですが、MSXML2を使おうとしたら、Excel2007で使えませんでした。 XMLDOMは、サポート切れ?で古いので、MSXML2を使うのが良いとWebで見ました。 DLLなどが必要な気がしているのですが、よくわかっていないのでご教授頂きたいです。 すみませんが、よろしくお願いします。 *****VBAプログラム(抜粋)****** Dim xml As Object, xmlItems As Object, objPrice As Object 'XML オブジェクト作成 Set xml = CreateObject("Microsoft.XMLDOM") xml.async = False xml.Load URI Set xmlItems = xml.SelectNodes("ItemLookupResponse/Items/Item") For Each objPrice In xmlItems ' ASIN If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then curWS.Cells(rowIndex, ASINCol) = objPrice.SelectSingleNode("ASIN").text End If Next *****取得したXML(抜粋)****** <ItemSearchResponse > <Items> <Item> <ASIN>111</ASIN> </Item> <Item> <ASIN>222</ASIN> </Item> <Item> <ASIN>333</ASIN> </Item> </Items> </ItemSearchResponse>

  • Access VBAで指定した要素を読み込みたい

    お世話になっております。 Access VBAでRSSを読み込み指定した要素の値を取得したいのですが、ググってもよく分からず どのようにすれば良いのか分からないので教えてください。 下記XMLの「item」の値を取得しフィールドへ値を挿入したいのです。 item_title1を読み込んだ後に次に別のレコードとしてitem_title2を読みたいといった形です。 初心者で言葉足らずの部分があると思いますが、ご教授の程よろしくお願いします。 VBA本文 Sub readXml() Dim XDoc As MSXML2.DOMDocument Dim node As MSXML2.IXMLDOMNode Set XDoc = New MSXML2.DOMDocument If XDoc.Load(CurrentProject.Path & "\" & "a.xml") = False Then MsgBox "読み込み失敗" Exit Sub End If Dim rs As New ADODB.Recordset 'データベースにデータを挿入する。 rs.Open "test", CurrentProject.Connection, , adLockOptimistic rs.AddNew    For Each node In XDoc.selectNodes("rss/content/title") rs!title = node.Text rs.Update rs.Close End Sub 取込元XML(RSS)ソース <?xml version="1.0"?> <rss version="2.0"> <content> <title>test/title> <language>ja</language> <item> <title>item_title1</title> </item> <item> <title>item_title2</title> </item> </content> </rss>

専門家に質問してみよう