プロが教えるわが家の防犯対策術!

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"を指定 → 部門計算,山田,部門集計,山口 を取りたいのですが

A 回答 (1件)

'完全なものではないがヒントというか指針。



'そもそも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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。お礼が遅くなり申し訳けございません。
回答をもとに、いろいろと試しておりました。
うまく使えそうです。本当にありがとうございました。

お礼日時:2007/07/11 23:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!