- PR -

VB6 DOMにてXMLのデータ取得

1
投稿者投稿内容
あまが
会議室デビュー日: 2004/09/10
投稿数: 2
投稿日時: 2004-09-10 10:50
VB6+MSXMLにて
以下のようなXMLファイルから
<item name="ワークID" type="text">のテキストを取得したいのですが

以下のVBのように<userid>は取得できたのですが
<item name="ワークID" type="text">の取得ができません
ほかのメゾットで取得しないと無理でしょうか?

aaa.xml
〜一部抜粋
<userid>100043</userid>
<item name="経費科目4" type="text"></item>
<item name="科目コード_上4" type="text"></item>
<item name="ワークID" type="text">WS4301000001</item>
<item name="部長コメント10" type="text"></item>
<item name="部長コメント7" type="text"></item>
<item name="合議部長13" type="stamp">
・・・・・

VB6(SP5)ソース

Private Sub Command3_Click()

Dim xmlDoc As DOMDocument
Dim nodeList As IXMLDOMNodeList

Set xmlDoc = New DOMDocument
Set xmlDoc = CreateObject("Microsoft.XMLDOM")

xmlDoc.Load ("aaa.xml")

Set nodeList = xmlDoc.getElementsByTagName("userid")
If nodeList.length <> 0 Then
Debug.Print xmlDoc.getElementsByTagName("userid")(0).Text
Else

End If

End Sub

るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-09-10 11:16
るぱんです。
コード:
<userid>100043</userid> 
<item name="経費科目4" type="text"></item> 
<item name="科目コード_上4" type="text"></item> 
<item name="ワークID" type="text">WS4301000001</item> 
<item name="部長コメント10" type="text"></item> 
<item name="部長コメント7" type="text"></item> 
<item name="合議部長13" type="stamp"> 

〜ソース抜粋〜
Set nodeList = xmlDoc.getElementsByTagName("userid") 
If nodeList.length <> 0 Then 
Debug.Print xmlDoc.getElementsByTagName("userid")(0).Text 
Else 

End If 


userid要素とitem要素は階層が一緒だからとれないと思いますよ?
やっている事は、
「userid要素」.selectSingleNode("item")です。
やりたい事は、
「userid要素」.selectSingleNode("../item")
もしくは、
「userid要素」.nextSiblingNode

〜以下よけいなお節介〜

この違いは微妙なのかな・・・?
XPathの参考書をもう少し良く読んだ方がよいと思います。

ちなみに、getElementsByTagName使うと一発で要素が取得出来るのは魅力なんだけど、
データ構造をあやふやに記憶する危険が高いです。

selectSingleNode("./指定階層内部の要素名")
ってやってたほうが後々勉強には楽だと思います。
階層を飛ばしたければ、
selectSingleNode(".//指定階層内部の要素名")
(「.」はカレントノードを指し示し、「..」は親ノードを指し示します。)

XMLを組む際には、常に階層を意識し続けないと後々メンテナンスしにくい
XMLデータ構造を作ってしまうので注意が必要です。

個人的にはXML=メモリ内の簡易データベースぐらいに考えてます。
データ構造のあやふやなDBっていやでしょ?

後で楽する為にやっといた方が良いんじゃないでしょうか?
あまが
会議室デビュー日: 2004/09/10
投稿数: 2
投稿日時: 2004-09-10 12:49
ありがとうございます。

XPathに関して調べてみます。

1

スキルアップ/キャリアアップ(JOB@IT)