Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7204 / 13644 ツリー ←次へ | 前へ→

【40506】xmlの読みとり 風魔 06/7/15(土) 10:19 質問[未読]
【40533】Re:xmlの読みとり H. C. Shinopy 06/7/15(土) 22:36 回答[未読]
【40542】Re:xmlの読みとり 風魔 06/7/16(日) 8:07 発言[未読]
【40555】Re:xmlの読みとり H. C. Shinopy 06/7/16(日) 22:21 回答[未読]
【40561】Re:xmlの読みとり 風魔 06/7/17(月) 8:54 お礼[未読]

【40506】xmlの読みとり
質問  風魔  - 06/7/15(土) 10:19 -

引用なし
パスワード
   現在、Excelからxmlファイルを読み込み
それをExcel上の固定フォーマット上に
表示する処理を行おうとしています。

以下のようなXMLからLIST/A/D/Nameタグの値を
一つのAタグごとに取得することができません。
状況としてSelectNodesメソッドを使えば、
すべてのNameタグの値を取得できます。
一つのAタグごとの取得の方法orMicrosoft.XMLDOMで
提供されているメソッドで何か良いものはないので
しょうか?


<?xml version="1.0" encoding="Shift_JIS" ?>
<LIST>

  <D>
    <Name>ABC</Name>
    <Name>DEF</Name>
  </D>


  <D>
    <Name>GHI</Name>
  </D>

</LIST>

【40533】Re:xmlの読みとり
回答  H. C. Shinopy  - 06/7/15(土) 22:36 -

引用なし
パスワード
   VBScriptの本にヒントがありましたので、
書き込みします。

[2]の249頁に、getElementsByTagNameの引数として、
記述例 要素a/要素b = 要素aの子の要素b とあります。
「Aタグ」が御提示のデータ例にありませんが、
要素a/要素b/要素c… と続けて指定してもいいようです。

[参考文献] いずれも、VBScriptの本
[1]佐藤信正『VBScript Hackers Technique Webクライアント・アプリケーションの制作』メディア・テック出版
[2]坂田健二『Windowsで学ぶXML』技術評論社

Sub MyXmlParse()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 参照設定:(?) 判らないため、Variantを指定。↓
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myFile As String
 Dim myXmlDoc, myNodeList, myNode ' As Variant
 Dim myFileValue As Boolean
 Dim i As Long
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 ActiveSheet.Range("A1").Select
 i = 0
 myFile = "C:\Documents and Settings\User\My Documents\Zzz\test.xml"
 '
 Set myXmlDoc = CreateObject("MSXML2.DOMDocument") ' ("Microsoft.XMLDOM")
 myXmlDoc.Async = False
 myFileValue = myXmlDoc.Load(myFile)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 If myFileValue = True Then
  Set myNodeList = myXmlDoc.getElementsByTagName("D/Name") ' ("A/D/Name")
  '
  For Each myNode In myNodeList
   i = i + 1
   Cells(i, "A").Value = myNode.Text
  Next ' myNode
 End If
End Sub ' MyXmlParse *----*----*  *----*----*  *----*----*  *----*----*

【40542】Re:xmlの読みとり
発言  風魔  - 06/7/16(日) 8:07 -

引用なし
パスワード
   返信ありがとうございます。

getElementsByTagNameメソッドを使用する場合、該当するタグの一覧をすべて取得するため、ある一つの「Dタグ」に囲まれている中の「Nameタグ」の一覧のみを取得することができないのです。

やはり、まとめてでしか取得することができないのでしょうか?

【40555】Re:xmlの読みとり
回答  H. C. Shinopy  - 06/7/16(日) 22:21 -

引用なし
パスワード
   ある一つの「Dタグ」に囲まれている中の「Nameタグ」の一覧のみを取得するということですが、
複数あるわけですから、添え字を付けて選択することになります。
下記は、Dタグの中のNameタグをセルに入れる処理です。
(Dタグごとに横書きします。)

Sub MyXmlParse4()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 参照設定:(?)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myFile As String
 Dim myXmlDoc, myNodeList, myNode, myChildNode ' As Variant
 Dim myFileValue As Boolean
 Dim r As Long
 Dim c As Long
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 ActiveSheet.Range("A1").Select
 r = 0 ' 行
 c = 0 ' 列
 '
 myFile = "C:\Documents and Settings\User\My Documents\Zzz\test.xml"
 '
 Set myXmlDoc = CreateObject("MSXML2.DOMDocument") ' ("Microsoft.XMLDOM")
 myXmlDoc.Async = False
 myFileValue = myXmlDoc.Load(myFile)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 If myFileValue = True Then
  Set myNodeList = myXmlDoc.getElementsByTagName("D")
  '
  For Each myNode In myNodeList
   ' MsgBox myNodeList(1).ChildNodes(1).Text
   If myNode.hasChildNodes Then
    Set myChildNode = myNode.SelectNodes("Name")
    r = r + 1
    For c = 0 To myChildNode.Length - 1
     Cells(r, c + 1).Value = myChildNode(c).Text
    Next ' c
   End If
  Next ' myNode
 End If
End Sub ' MyXmlParse4 *----*----*  *----*----*  *----*----*  *----*----*

【40561】Re:xmlの読みとり
お礼  風魔  - 06/7/17(月) 8:54 -

引用なし
パスワード
   無事解決できました。
いろいろとありがとうございました。

7204 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free