- - PR -
VB6 DOMにてXMLのデータ取得
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2004-09-10 11:16
るぱんです。
userid要素とitem要素は階層が一緒だからとれないと思いますよ? やっている事は、 「userid要素」.selectSingleNode("item")です。 やりたい事は、 「userid要素」.selectSingleNode("../item") もしくは、 「userid要素」.nextSiblingNode 〜以下よけいなお節介〜 この違いは微妙なのかな・・・? XPathの参考書をもう少し良く読んだ方がよいと思います。 ちなみに、getElementsByTagName使うと一発で要素が取得出来るのは魅力なんだけど、 データ構造をあやふやに記憶する危険が高いです。 selectSingleNode("./指定階層内部の要素名") ってやってたほうが後々勉強には楽だと思います。 階層を飛ばしたければ、 selectSingleNode(".//指定階層内部の要素名") (「.」はカレントノードを指し示し、「..」は親ノードを指し示します。) XMLを組む際には、常に階層を意識し続けないと後々メンテナンスしにくい XMLデータ構造を作ってしまうので注意が必要です。 個人的にはXML=メモリ内の簡易データベースぐらいに考えてます。 データ構造のあやふやなDBっていやでしょ? 後で楽する為にやっといた方が良いんじゃないでしょうか? | ||||
|
投稿日時: 2004-09-10 12:49
ありがとうございます。
XPathに関して調べてみます。 |
1