- 締切済み
XMLDOMを用いて 指定されたタグ名のデータだけを取りたいのですが
Windows2000 ExcelVBA Microsoft XML version2.0 環境でXMLデータ処理をしています。 <?xml version="1.0"?> <!-- enerated --> <CURS> <LIST_OS> <ORSTERY> <X_W>確認データ</X_W> <LIST_DATA> <BREAK> <USER_NAME>山田</USER_NAME> <SEC_GR_NAME>部門</SEC_GR_NAME> <LG_RES> <G_PS> <APPL_NAME>部門計算</APPL_NAME> <RES_NAME>山田</RES_NAME> </G_PS> <G_PS> <APPL_NAME>部門集計</APPL_NAME> <RES_NAME>山口</RES_NAME> </G_PS> </LG_RES> </BREAK> </LIST_BREAK> <AF_W></AF_W> <BF_X></BF_X> </ORSTERY> </LIST_OS> </CURS> XMLDOMを用いて 指定されたタグ名のデータだけを取りたいのですが タグ名:"X_W"を指定 → 確認データ , タグ名:"SEC_GR_NAME"を指定 → 部門 タグ名:"G_PS"を指定 → 部門計算,山田,部門集計,山口 を取りたいのですが
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- himajin100000
- ベストアンサー率54% (1660/3060)
'完全なものではないがヒントというか指針。 'そもそもXML自体が整形式(開始タグと終了タグが正しい入れ子になっていて全て存在する)ではなかったので '書き換えました。 '当然文字コードはBOM付きのUTF-8です <?xml version="1.0"?> <!-- enerated --> <CURS> <LIST_OS> <ORSTERY> <X_W>確認データ</X_W> <LIST_DATA> <BREAK> <USER_NAME>山田</USER_NAME> <SEC_GR_NAME>部門</SEC_GR_NAME> <LG_RES> <G_PS> <APPL_NAME>部門計算</APPL_NAME> <RES_NAME>山田</RES_NAME> </G_PS> <G_PS> <APPL_NAME>部門集計</APPL_NAME> <RES_NAME>山口</RES_NAME> </G_PS> </LG_RES> </BREAK> <AF_W></AF_W> <BF_X></BF_X> </LIST_DATA> </ORSTERY> </LIST_OS> </CURS> '================Module1==================== Option Explicit 'Optional Namespace As Stringな関数作ると面白そうかな '当然ながら参照設定でMicrosoft XML version2.0を追加しておくこと。 Public Function LoadMyXML(FileName As String, TagName As String) As Boolean Dim objXML As MSXML.DOMDocument Dim strXML As String Dim Elements As IXMLDOMNodeList Dim Element As IXMLDOMElement Set objXML = New MSXML.DOMDocument If Not objXML.Load(FileName) Then LoadMyXML = False Exit Function End If Set Elements = objXML.GetElementsByTagName(TagName) If Elements.Length = 0 Then LoadMyXML = False Exit Function End If For Each Element In Elements MsgBox (Element.Text) LoadMyXML = True Next End Function '=====================UserForm1=================== Option Explicit 'TextBox1,TextBox2,CommandButton1がUserForm1上にある 'TextBox1がファイル名,TextBox2がタグ名なので,色々入力して試してみよう。 '実際にTextBox2に"G_PS"を入力した時には '「部門計算 山田」 '「部門集計 山口」 'という感じで,カンマでなく、かつ、それぞれ別々にメッセージボックスに表示される。うまく要素を取得するには再帰処理などが必要になるかも Private Sub CommandButton1_Click() Dim hoge As Boolean hoge = LoadMyXML(TextBox1.Text, TextBox2.Text) End Sub
お礼
回答ありがとうございます。お礼が遅くなり申し訳けございません。 回答をもとに、いろいろと試しておりました。 うまく使えそうです。本当にありがとうございました。