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

このQ&Aのポイント
  • VB2005でXMLデータを解析し、要素の数を読み取る方法について教えてください。
  • XMLデータから要素を読み取るためのパス指定方法について詳しく教えてください。
  • 複数の同じ要素がある場合、全ての要素を解析してデータベースに登録する方法を教えてください。
回答を見る
  • ベストアンサー

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

noname#51596
noname#51596

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

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

SelectNodesで取得したのはXmlNodeListですから Countプロパティが存在します dim ID() as String redim ID( CreateInfoNode.Count - 1) for n=0 to CreateInfoNode.Count - 1   ID(n) = CreateInfoNode(n).InnerText Next と言った具合で取得可能なのでは …

noname#51596
質問者

お礼

早速のお返事ありがとうございます。 教えていただいたCountプロパティで取得できました。 ありがとうございました。 ちなみに、取得したCreatorInfodNode(n)の中の属性を取得したい場合は、どうすれば良いかご存知でしょうか。 例えば、下記XMLの場合、属性Typeによって後続の処理が異なるため、CreatorInfodNode(n)に取得してから属性Typeを取得したいのですが、どうすれば良いのでしょうか。 <Mml> <Body> <Module type=1>A</Module> <Module type=1>B</Module> <Module type=2>C</Module> </Body> </Mml> 追加で申し訳ありませんが、ご存知でしたら教えていただけたら幸いです。

その他の回答 (1)

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

CreateInfoNode(n)が XmlNodeなので これのAttributesコレクションを見れば 属性指定があるかどうかの判断できそうです CreateInfoNode(n).Attributes.Countが1以上であれば何かの属性つきだと判断できますよね

noname#51596
質問者

お礼

度々のお返事、本当にありがとうございます。 教えていただいたAttributesコレクションでできました。 初歩的な質問でしたが、ありがとうございました。

関連する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の初心者です。 下記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 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • 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 何かヒントでも良いので、たくさんの方の知恵をお借りしたいです。

  • VBでXMLファイルを作成していますが、エラーになります

    すみません、教えてください。 VB6でXMLファイルを作成しています。コメントを入れようとすると"!--"の文字でこけます。どうしたらいいのでしょうか?コーディングは以下のようにしてます。 Dim xmlDoc As New MSXML2.DOMDocument40 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(3) As IXMLDOMNode '要素 garFNRpt = sFPass + "Sousinfile\DATA\" + sFilemei + ".xml" 'XML宣言を追加します。 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, """!--""kml基本情報", "")) よろしくお願いします

  • VB6でXMLを作成しているのですがエラーが出ます

    VB6でXML作成のプログラムを作ったのですが、読み取り専用のノードを編集しようとしましたのメッセージボックスが表示されます。 どなたかどこが悪いのか、ご教授願います。 ソースコードは以下の通りです。 Dim xmlDoc As MSXML.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(3) As IXMLDOMNode '要素 Dim attr As MSXML.IXMLDOMAttribute '属性 Dim newText Set xmlDoc = New MSXML.DOMDocument 'XMLドキュメントを作成します。 'XML宣言を追加します。 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<ClinicalDocument>要素を追加します。 Set node(1) = xmlDoc.createElement("ClinicalDocument") Call xmlDoc.appendChild(node(1)) 'xmlns:xsi属性を追加します。 Set attr = xmlDoc.createAttribute("xmlns:xsi") Call node(1).Attributes.setNamedItem(attr) attr.nodeValue = "http://www.w3.org/2001/XMLSchema-instance" ''ここでエラーが出ます '<Customer>要素を追加します。 Set node(2) = xmlDoc.createElement("Customer") Call node(1).appendChild(node(2)) Call node(2).appendChild(xmlDoc.createTextNode(vbNewLine)) 'id属性を追加します。 Set attr = xmlDoc.createAttribute("id") Call node(2).Attributes.setNamedItem(attr) attr.nodeValue = "1" '<Name>要素を追加します。 Set node(3) = xmlDoc.createElement("Name") Call node(2).appendChild(node(3)) Set newText = xmlDoc.createTextNode("Jhon") Call node(3).appendChild(newText) 'XMLドキュメントの出力 xmlDoc.save (App.Path & "\customer.xml")

  • VB2005でDBから取得したデータを指定されたXMLデータへ変換する方法について

    VB2005の初心者です。 Aシステムの開発(VB2005)で、Bシステムとの通信部分の開発をしています。 Bシステムとの通信はTCP/IP通信にて、XMLデータでやりとりをします。 XMLデータは、タグなど形式が決まっています。 単純に、適当なXMLデータを通信でやりとりすることはできたのですが、 AシステムでDB(SQLServer)から取得したデータを、形式に沿ったタグを使用したXMLデータに変換してから通信したいのですが、その変換方法が分りません。 DBのデータをXML形式に変換すると、フィールド名のタグでできると思うのですが、そうではなく、指定したタグを使用してXMLデータを作成するにはどうすれば良いのでしょうか。 タグを指定、もしくは変換する方法などはあるのでしょうか。 何かヒントでも良いので、たくさんの方の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • VB2005でUTF-8からshift_JISに変換する方法

    VB2005の初心者です。 UTF-8のXMLデータで、一部日本語の項目が化けているのでshift_JISに変換したいのですが、やり方が分りません。 下記のとおり、XMLデータから項目を抽出して、ログに出力すると化けてしまいます。 Dim CreatorInfodNode As Xml.XmlNodeList CreatorInfodNode = xmlDoc.SelectNodes("/Mml/MmlBody/MmlModuleItem/docInfo[@contentModuleType=contains(@contentModuleType,'patientInfo')]" + _ "/mmlCi:CreatorInfo/mmlPsi:PersonalizedInfo/mmlPsi:personName/mmlNm:Name/mmlNm:fullname", nsmgr1) LbLogFlg = WriteLogFile("fullname:" + CreatorInfodNode(0).InnerText.Trim) ↓ログの出力結果 fullname:????????????????????? 皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • VBでXMLファイルを作ると xmlns= が・・・

    VB6でXMLを作成しています。 Dim xmlDoc As New MSXML2.DOMDocument40 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(7) As IXMLDOMNode '要素 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version= ""1.0"" encoding= ""Shift_JIS"" standalone= ""no""")) Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "kml", "")) Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "kmlHeader", "")) Set node(3) = node(2).appendChild(xmlDoc.createNode(NODE_ELEMENT, "kml_DTD", " kml_Version= 2.8"" kml_FileName=""../DTD/HYB01.dtd")) 以下省略 すると <kml_DTD xmlns="kml_Version= 2.8" kml_FileName="../DTD/HYB01.dtd" /> "xmlns=" はどうすれば消えますか?お願いします。

  • XMLデータをパーサーをかけてテキストデータにするには?

    VB2005の初心者です。 XMLファイルを読み込んで、パーサーをかけてテキストデータにしたいのですが、やり方が分りません。 (パーサーを使わずにテキストデータにすることはできます。) ご存知の方は、ヒントでも良いので教えていただきたいです。 仕事で行き詰っているため、たくさんの方の情報をいただけると幸いです。 下記は、パーサーを使わないやり方です。 Dim xmlDoc As XmlDocument = New XmlDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") strText = xmldoc.OuterXml パーサーを使う場合、下記のようになると思うのですが、 どのようにテキストデータにすれば良いのか分りません。 (OuterXmlが使えません。) Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") よろしくお願い致します。

専門家に質問してみよう