2017-08-08 4 views
1

たとえば、 "test"の子ノードだけをタグ名 "result"でループしたいとします。VBAを使用してXML内の特定のタグ名を持つ子ノードをループすることはできますか?

<test> 

    <result> 
    </result> 
    <memo1> 
    </memo1> 

    <result> 
    </result> 

    <memo2> 
    </memo2> 

    <result> 
    </result> 

    <memo3> 
    </memo3> 


    </test> 

私はthisと思っていました。しかし、私はそれがどのように機能するかを正確には知りません(実際に私が望むものを提供している場合)。

+0

何をしようとしていますか?あなたが提供したXMLデータは非常に限られています。別のレベルの子ノードを配置して、データを使用してより有益な答えを書くことができます。 – jsotola

答えて

1

次に、XMLデータを使用する例を示します。私はあなたのXMLファイルが最初の行に<?xml version='1.0'?>を持っていなければならないと確信しています。しかしそれとは別に、これはどのように動作するのですか:

Sub testXMLLoop() 
    Dim xml As String 
    xml = "<?xml version='1.0'?>" & _ 
    vbCrLf & " <test>" & _ 
    vbCrLf & " <result>" & _ 
    vbCrLf & " </result>" & _ 
    vbCrLf & " <memo1>" & _ 
    vbCrLf & " </memo1>" & _ 
    vbCrLf & " <result>" & _ 
    vbCrLf & " </result>" & _ 
    vbCrLf & " <memo2>" & _ 
    vbCrLf & " </memo2>" & _ 
    vbCrLf & " <result>" & _ 
    vbCrLf & " </result>" & _ 
    vbCrLf & " <memo3>" & _ 
    vbCrLf & " </memo3>" & _ 
    vbCrLf & " </test>" 
    Dim xmlDoc As Object 
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 
    xmlDoc.LoadXML xml 
    'xmlDoc.Load "file\path\to\books.xml" 
    If (xmlDoc.parseError.ErrorCode <> 0) Then 
     Dim myErr As Object 
     Set myErr = xmlDoc.parseError 
     Debug.Print "You have error " + myErr.reason 
    Else 
     Dim objNodeList As Object 
     Set objNodeList = xmlDoc.getElementsByTagName("test") 
     Dim oTestList, oChild As Object 
     For Each oTestList In objNodeList 
      For Each oChild In oTestList.ChildNodes 
       if oChild.nodeName = "result" then 
        'Do stuff with oChild 
        Debug.Print oChild.nodeTypedValue 
       end if 
      Next 
     Next 
    End If 
End Sub 
+0

あなたの答えが私の質問とどのように関連しているのかわかりません... – Aqqqq

+0

答えを説明するために別の編集を行いました。 – Sancarn

関連する問題