2011-05-15 18 views
2

私はVBAを介して一般的なXMLファイルを解析しようとしています。私がやりたいこと:xmlノードの値を抽出し、XMLファイルに書き込んでエクスポートします。VBA Excel 2003でXMLを解析する方法は?

わかりやすいドキュメントといくつかの例を使って、一度に1つのノードを読むことができるライブラリを知っていますか。これまでのところ

Sub Go() 

    Dim xmlDoc As MSXML2.DOMDocument 
    Dim xmlElement As MSXML2.IXMLDOMElement 
    Dim xmlNode As MSXML2.IXMLDOMElement 

    Set xmlDoc = New MSXML2.DOMDocument 
    xmlDoc.Load ("E:\cdCatalog.xml") 

    Set xmlElement = xmlDoc.documentElement 
    Set xmlNode = xmlElement.FirstChild 

    parseNodes xmlElement, 1, 1 
    'parseNodes xmlNode, 1, 1 

End Sub 

Sub parseNodes(node As MSXML2.IXMLDOMElement, i As Integer, j As Integer) 
    Dim child As MSXML2.IXMLDOMNode 

    'result = node.baseName & " : " & node.Text 
    result = node.nodeName 

    Sheet1.Activate 
    ' text if... 
    Cells(i, j) = result 

    j = j + 1 
    If (node.hasChildNodes) Then 

     For Each child In node.childNodes 
      i = i + 1 
      'MsgBox child.Text 
      MsgBox TypeName(node.childNodes) 
      parseNodes child, i, j 
     Next 
    End If 

End Sub 
+0

これが役に立つかもしれません:http://stackoverflow.com/questions/11305/how-to-parse-xml-in-vba –

+0

あなたは私たちは、あなたがそれを修正することができますしようとしたものを、私たちを表示します。あなたの好きな検索エンジンで "VBA DOM XML tutorial"と入力します。 –

+0

質問を編集しました。 "Dim gReader As New XmlTextReader(FileName)"がエラーである理由を理解しようとしています。ありがとう。 –

答えて

4

あなたのコメントに指定されている、あなたの更新の質問への対応:

あなたはインスタンスがDim文の引数を指定して、そのようにVBAでオブジェクトをすることはできません。試してみてください。また、

Dim gReader As XmlTextReader 
gReader = New XmlTextReader 

を、私はあなたがここにXmlTextReaderドキュメントを読むことをお勧め:XmlTextReaderを使用する方法

http://msdn.microsoft.com/en-us/library/1af7xa52.aspx

の例が示します。

編集:私は大雑把なインターネット検索では、XmlTextReaderは.NETでは実装されていますが、VBAでは実装されていません。

XmlTextReaderの代わりにDOMを使用することをおすすめします。私はDOMを比較的使いやすいと感じています。欠点は、非常に大きなXMLファイルでは効率が悪いことです。大きなファイルを操作しない限り、DOMはうまく動作するはずです。

Dim xlmDoc As Object 
Set xlmDoc = CreateObject("Msxml2.DOMDocument.6.0") 
xmlDoc.Load fileName 
+0

だから..まず最初に..あなたの助けをありがとう。しかし、私はXmlTextReaderを使うことができませんでした。たぶん私はあまりにもノブですが、それは(私のために)うまくいきません。私はこれまでのところ私のコードを更新しました..今私は参照の不一致があります:( –

関連する問題