VBscriptでXMLデータの抽出に関する質問

このQ&Aのポイント
  • VBscriptを使用してXMLデータを抽出する方法について質問があります。具体的には、XMLファイルからCOMMENTタグのデータを取得する際に「オブジェクトがありません」というエラーが発生しています。
  • VBscriptを使用してXMLデータの抽出を行いたいです。具体的には、XMLファイルからCOMMENTタグのデータを取得する作業を行っていますが、「オブジェクトがありません」というエラーが発生して解決策がわかりません。
  • VBscriptを使用してXMLデータの抽出に関する問題が発生しています。XMLファイルからCOMMENTタグのデータを取得する際に「オブジェクトがありません」というエラーが発生しており、解決方法が分かりません。
回答を見る
  • ベストアンサー

VBscriptでXMLデータの抽出に関する質問

教えて下さい。以下のようなXMLファイルがあります。 <?xml version="1.0" encoding="Shift-JIS"?> <ROOT> <INFO> <NO>0001</NO> <NAME>ABC</NAME> <COMMENT> </COMMENT> <AGE>30</AGE> </INFO> </ROOT> これを以下のようにVBScriptにてデータを取り出したいです。 Dim DOM, docRoot, node, nodeList, i, m Dim objADO, objADO2 Dim objRS Dim sqlstmt, strSQL Dim no, comment 'DOMオブジェクト生成 Set DOM = CreateObject("Microsoft.XMLDOM") '同期モード DOM.async = True 'XMLを読み込む DOM.load("11.xml") 'ルートセット Set docRoot = DOM.documentElement 'ノードの設定 Set nodeList = docRoot.selectNodes("/ROOT/INFO") 'ループ For Each node In nodeList For i = 0 to node.ChildNodes.length - 1 Select case node.childNodes(i).nodeName case "NO" no = node.childNodes(i).firstChild.nodeValue case "COMMENT" comment = node.childNodes(i).firstChild.nodeValue End select Next Next ところがCOMMENTタグのようにデータが空のものがあると 「オブジェクトがありません」とエラーになります。 if Not IsNull(node.childNodes(i).firstChild.nodeValue) then というようにもやってみましたが、これでも同じエラーとなってしまいます。 何か方法はないでしょうか?アドバイスを宜しくお願いします。

  • XML
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

if Not IsNull(node.childNodes(i).firstChild.nodeValue) then でなくて if node.childNodes(i).hasChildNodes then とすればいいです

otzotz
質問者

お礼

ありがとうございます。出来ました。 助かりました。本当にありがとうございます。

関連するQ&A

  • xmlから取得したアドレスにリンクを貼りたい。

    xmlから取得したページアドレスをダイナミックテキストに表示、リンクを貼りたいのですがうまくいきません…。 htmlTextを使用してかなり強引に記述しましたがやっぱり不可能でした。(本来アドレスを指定するべきところにノードの参照を直接書いた) dataText.html=true; dataText.condenseWhite=false; dataText.htmlText = <a href='weather_xml.firstChild.childNodes[2].childNodes[1].firstChild.nodeValue'> weather_xml.firstChild.childNodes[2].childNodes[1].firstChild.nodeValue </a> やりたいことは 1・xmlから取得したアドレスをテキスト表示。 2・そのアドレスと同じアドレスのリンクをそのテキストに貼る。 です。 1だけであればtextで表示指定するだけなので出来たのですが 1と2を兼ね合おうとするとどうしてもうまくいきません。 htmlTextではできないのでしょうか? 変数などで解決できるのであればその方法を教えて頂きたいです。 flashのバージョンは8です。 初歩的な質問ですいません。よろしくお願いします。

    • ベストアンサー
    • Flash
  • VBScriptを用いたXMLのデータ抽出に関して

    下記のsample.xmlから sample.xml ---------------------------------------------- <?xml version="1.0" encoding="utf-8" ?> <books> <item> <title>XML入門-第1巻</title> <price>2500</price> <isbn>1-1234-5678-X</isbn> <authors> <author>西谷 亮</author> </authors> <imgfile>1-1234-5678-X.gif</imgfile> </item> <item> <title>XML入門-第2巻</title> <price>2200</price> <isbn>1-1234-5678-0</isbn> <authors> <author>西谷 亮</author> <author>山田 太郎</author> </authors> <imgfile>1-1234-5678-0.gif</imgfile> </item> <item> <title>XML入門-第3巻</title> <price>3600</price> <isbn>1-1234-5678-1</isbn> <authors> <author>西谷 亮</author> <author>鈴木 次郎</author> </authors> <imgfile>1-1234-5678-1.gif</imgfile> </item> </books> ---------------------------------------------- 下記のtitle.vbsを用いて、「<title>」タグに表記された 書物のタイトルだけを抜き出します。 title.vbs ---------------------------------------------- 01 : Dim objDOM, rtResult 02 : 03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument") 04 : rtResult = objDOM.load("Sample.xml") 05 : If rtResult = True Then 06 : procDispDatas objDOM.childNodes 07 : End If 08 : Set objDOM = Nothing 09 : 10 : Sub procDispDatas(objNode) 11 : Dim obj 12 : For Each obj In objNode 13 : If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then 14 : MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue 15 : End If 16 : If obj.hasChildNodes Then 17 : procDispDatas obj.childNodes 18 : End If 19 : Next 20 : End Sub ---------------------------------------------- 上記の記述ではサブプロシージャprocDispDatas(objNode) にて、<title>タグの要素の数だけMsgBoxでタイトル名の メッセージボックスが表示されるかと思います。 これをひとつのメッセージでまとめるて表示するはどのように 記述すればよいでしょうか。 下記のメッセージの表示が理想です。 メッセージ ---------------------------------------------- title:XML入門-第1巻 title:XML入門-第2巻 title:XML入門-第3巻 ---------------------------------------------- お手数をおかけしますが、ご存知の方 ご教授いただけませんでしょうか>< よろしくお願いいたします。

    • 締切済み
    • XML
  • xmlから作ったサムネールを移動させる

    こんにちは。 flashを勉強中です。XMLからサムネールの一覧を作ろうとして、 なんとかステージに配置するのはできたのですが、サムネールの 数が多いので、マウスの位置によって垂直に移動させる様なことを したいのですが、どうして動かせばよいのかがわからずに困って おります。 アクションスクリプトは以下の様にしております。 このサムネールをMCに埋め込む方法だけでもお教え頂ければ 幸いです。よろしくお願いします。 ----------------------------------------------- myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("data.xml"); myXML.onLoad = function (loaded) {    if (loaded) {      v_rootNode = myXML.firstChild;      v_num = v_rootNode.childNodes.length;      _root.total = v_num;      v_currentPhoto = v_rootNode.firstChild;      v_currentNumber = 0;       for (i=0; i < v_num; i++) {        duplicateMovieClip (icon , "mc_icon"+i, i+1);        path = v_currentPhoto.childNodes[1].firstChild;         _root["mc_icon"+i]._x = 30;         _root["mc_icon"+i]._y = 65 * i + 30;         _root["mc_icon"+i].picture.LoadMovie(path);         _root["mc_icon"+i].title = v_currentPhoto.childNodes[0].firstChild;        v_currentPhoto = v_currentPhoto.nextSibling;        }     } else {      trace ("error occured");   } };

    • ベストアンサー
    • Flash
  • xmlの値を配列に格納したいんですけどエラーがでてしまう。

    <?xml version="1.0" encoding="UTF-8" ?> <Dataroot> <aaa> <bbb> <ccc>値1</ccc> </bbb> <bbb> <ccc>値2</ccc> </bbb> </aaa> </Dataroot> ---------------------------------------------------------------- のようなXML文書がある時<ccc></ccc>の値を取り出す場合 ---------------------------------------------------------------- Imports System Imports System.IO Imports System.Xml public class Sample public shared sub Main() Dim doc as XmlDocument = new XmlDocument() doc.Load("data.xml") 'XML文書の読み込み Dim root as XmlElement = doc.DocumentElement Dim nodeList as XmlNodeList nodeList = root.SelectNodes("/Dataroot/aaa/bbb")'/cccまでやる方が簡単 Dim node as XmlNode Dim ccclist() As String = Nothing for each node in nodeList ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し next end sub end class としているのですが ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し この行で オブジェクト参照がオブジェクト インスタンスに設定されていません。 とエラーがでて困っています。 これはどのように修正すればよろしいでしょうか? 教えてください。お願いします。

  • Flashにブログ更新情報を表示する

    Flash初心者です。 Flashにブログのatom(rss.xml)を読み込み ブログタイトルや、最新の記事タイトル3つを表示させようと思っています。 ちょうど良いサイトがあり、 http://allabout.co.jp/gs/flash/closeup/CU20090926E/ に従い、1フレーム目に ============================================================ System.useCodepage = true; newsData = new XML(); newsData.ignoreWhite = true; newsData.load("(自身のブログTOPへのフルパス)/atom.xml"); ↑(GoogleのBlogger)のrss.xmlをフルパスで指定しました。↑ ============================================================ と指定し、 10フレーム目に ============================================================ //サイトのタイトルを取得 siteTitle = newsData.firstChild.childNodes[0].childNodes[2].nodeValue; //サイトのURLを取得 siteUrl = newsData.firstChild.childNodes[0].childNodes[6].nodeValue; //記事タイトルを格納する変数 item1Title = newsData.firstChild.childNodes[0].childNodes[13].childNodes[4].nodeValue; item1Url = newsData.firstChild.childNodes[0].childNodes[13].childNodes[10].nodeValue; item1Title = newsData.firstChild.childNodes[0].childNodes[14].childNodes[4].nodeValue; item1Url = newsData.firstChild.childNodes[0].childNodes[14].childNodes[10].nodeValue; item1Title = newsData.firstChild.childNodes[0].childNodes[15].childNodes[4].nodeValue; item1Url = newsData.firstChild.childNodes[0].childNodes[15].childNodes[10].nodeValue; //整形してテキストボックスに表示 // site.htmlText = "<b><a href='" + siteUrl + "'>" + siteTitle + "</a></b>"; item.htmlText = "<b>新着情報</b>" if(item1Title != undefined){ item.htmlText += "<a href='" + item1Url + "'>" + item1Title + "</a>"; } if(item2Title != undefined){ item.htmlText += "<a href='" + item2Url + "'>" + item2Title + "</a>"; } if(item3Title != undefined){ item.htmlText += "<a href='" + item3Url + "'>" + item3Title + "</a>"; } ============================================================ と指定したxmlに合わせてxmlの内容の取り出し指定を変更しましたが、 「URL '(自身のブログTOPへのフルパス)/atom.xml' を開く処理のエラー」 という出力エラーが出てしまいます。 理解せずに作っているので、何が悪いのかまったくわかりません。 よろしくお願いいたします。

  • 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")

  • XMLファイルの読み込みとデータの引き出し

    すみません。 徹夜しても答えがわからないのですが、 XMLからSWFの読み込みなのですが 下記スクリプトの間違いは何でしょうか? FLASH8.0 AS2 で作成してます。 //XMLファイルのXMLオブジェクトへの格納 myobjXML = new XML(); myobjXML.ignoreWhite = true; //XMLファイルの読み込み myobjXML.load("article.xml"); //XMLの情報格納 var imgNum = _root.myobjXML.childNodes[0].childNodes[0].nodeValue; if (imgNum == 1) { _root.nextbtn_mc._visible = false; _root.nextbtnlarge_mc._visible = false; } //写真数表示 this.imgnumtxt.text = imgNum; this.imgnumtxt2.text = imgNum;

  • 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

  • xmlのデータ取得方法について

    WshでXMLの取り込みをしているのですが、あるタグにくるとエラーが出ます。 どのように処理をすればよろしいのでしょうか? ■ ソース(抜粋) objNode.Load("ファイル名") For Each tmp In objNode.getElementsByTagName("東京都") For Each tmp2 In tmp.ChildNodes If tmp2.hasChildNodes Then For Each tmp3 In tmp2.getElementsByTagName("新宿区") For Each tmp4 In tmp3.ChildNodes If tmp4.nodeName = "AAA" Then n1 = tmp4.firstChild.nodeValue End If If tmp4.nodeName = "BBB" Then n2 = tmp4.firstChild.nodeValue End If Next Next End If Next Next ■ XMLデータ <東京都> <新宿区> <AAA> "大人の町" </AAA> <BBB /> <----------この形式のタグでエラーが出ます。 </新宿区> </東京都> <BBB />は、値が無いので、firstChildではエラーになるみたいです。("tmp4.firstChildはオブジェクトがありません。"とでます。) 以上ご教授よろしくお願いします。

  • vb6 XMLファイル出力について<S></S>

    vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing