DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB6でXML操作

  • 題名: VB6でXML操作
  • 著者: かーとまん
  • 日時: 2008/08/11 9:59:38
  • ID: 22658
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[vb6]
分類:[VB6以前]

VB6で既存のXMLファイルを読み込んで
値を書きこんだりしたいのですが
どうすればいいでしょうか。
手元にVB6がないので、とりあえず読み込みの部分だけですが…。

参照設定に「Microsoft XML, v2.6」を追加。

'*******************************
'変数の宣言
'*******************************
Dim xmlDoc As MSXML2.DOMDocument
Dim xmlNode As IXMLDOMNode
Dim xmlTarget As IXMLDOMElement

'*******************************
'処理開始
'*******************************
'読み込み
xmlDoc = New MSXML2.DOMDocument
xmlDoc.async = False
xmlDoc.Load(App.Path & "xmlパス")

'出力
xmlNode = xmlDoc.childNodes.Item(1)
Debug.Print(xmlNode.childNodes(0).Text)

'終了処理
If Not xmlDoc Is Nothing Then xmlDoc = Nothing
If Not xmlNode Is Nothing Then xmlNode = Nothing
If Not xmlTarget Is Nothing Then xmlTarget = Nothing

上記のような記述で出来たような気がします。
■No22660に返信(もょもとさんの記事)

返信ありがとうございます。
書き込みのほうはどうすればよいでしょうか?
ジェットストリ…えと、Saveメソッドで書き込めませんか?
■No22674に返信(もょもとさんの記事)
すいません、まったくやり方がわからないので
具体的な使い方をお願いします。
> ■No22674に返信(もょもとさんの記事)
> すいません、まったくやり方がわからないので
> 具体的な使い方をお願いします。

最初に申しましたように、私は今VB6を使っておりませんので、
何となくこんな感じ、という情報は提供できるのですが、
それ以上はお答えできないのです。

ヒントくらいは差し上げることができればと思っておりますので、
DOMオブジェクトについて調べてみて下さい。

>ジェットストリ…えと、Saveメソッドで書き込めませんか?

xmlDoc.save(App.Path & "xmlパス")

Saveメソッドの使い方は上記の通りです。
下記のサイトが参考になると思いますので、ご覧下さい。

DOM Reference
http://msdn.microsoft.com/en-us/library/ms764730.aspx
■No22679に返信(もょもとさんの記事)
ありがとうございます。
とりあえずリンク先などみて試してみます。
■No22680に返信(かーとまんさんの記事)
やっぱりよくわかりませんでした・・・
各項目の値を変更したいのですが・・・
2008/08/11(Mon) 19:07:08 編集(投稿者)

# MSXML は、できるだけ新しいバージョンを使うようにした方が無難です。

■No22688に返信(かーとまんさんの記事)
> やっぱりよくわかりませんでした・・・
> 各項目の値を変更したいのですが・・・

各ノードの値を変更するには、Nodes 系のプロパティから辿る方法や、
XSLT で変換をかける方法など、幾つかの方法がありますが、とりあえずは
「SelectSingleNode メソッド / SelectNodes メソッド」を使うと便利かと。


Const SRC As String = "C:\src.xml"
Const DST As String = "C:\dst.xml"

Dim doc As MSXML2.DOMDocument

'オブジェクト生成。
Set doc = New MSXML2.DOMDocument ' = CreateObject("MSXML2.DOMDocument")
'Set doc = New MSXML2.DOMDocument60 ' = CreateObject("MSXML2.DOMDocument.6.0")

'同期モードで読み込む。
doc.async = False

'load メソッドは、ファイル/URL からの読みこみ。
'loadXML なら、XMLテキストからの読みこみ。
'読み込みの成否は、これらのメソッドの戻り値または
'parseError プロパティの戻り値にて得られる。
doc.Load SRC

'SelectSingleNode メソッド等で、XPath 式と XSLPattern の
'どちらの形式を解釈させるかを指定する。最近のバージョンの MSXML は
'XSLPattern をサポートしていないので、個人的には XPath を推奨。
doc.setProperty "SelectionLanguage", "XPath"
'doc.setProperty "SelectionLanguage", "XSLPattern"

'全ノードの中で、"id" という名前を持つ属性ノードを探す。
' 複数あった場合、最初に見つかったノードが返される。
' 複数すべてを列挙したいなら、selectNodes を使えば OK。
Dim node As IXMLDOMNode
Set node = doc.selectSingleNode("//@id")
If node Is Nothing Then
 MsgBox "id属性(<〜 id='…'> 形式の要素)はありません。"
Else
 'その属性値を"あいうえお"にする。
 node.Text = "あいうえお"
End If

doc.save DST


あとは SDK を見て(XML に関する基礎知識がある事を前提として)、
それでも分からなかった場合、具体的に、どういう XML をどのように
編集したいのかを書いてもらえれば、適切な回答が付くかと思います。

# この他、新しいノードの追加、ノードの削除、名前空間の指定方法などなど、
# やりたい内容によって、記述すべきコードも変わってくるでしょうし。


おまけ。MSXML のパフォーマンス情報について
http://www.microsoft.com/japan/msdn/columns/xml/xml02212000.aspx
http://www.microsoft.com/japan/msdn/columns/xml/xml03202000.aspx
■No22689に追記
> 'SelectSingleNode メソッド等で、XPath 式と XSLPattern の
> 'どちらの形式を解釈させるかを指定する。最近のバージョンの MSXML は
> 'XSLPattern をサポートしていないので、個人的には XPath を推奨。
> doc.setProperty "SelectionLanguage", "XPath"
> 'doc.setProperty "SelectionLanguage", "XSLPattern"

両者の違いは、下記サンプルが参考になるかと思います。
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=10633&page=300
  • 題名: Re[10]: VB6でXML操作
  • 著者: かーとまん
  • 日時: 2008/08/18 14:56:04
  • ID: 22734
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No22694に返信(魔界の仮面弁士さんの記事)
遅くなりましたが解決しました。
どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板