2013-05-14 125 views
5

我從Web服務獲得了一個XML。我將它聲明爲「DOMDocument」。 這是我的XML。現在我想讀取名爲「ZIP」的所有屬性。如何使用VBA讀取XML中的所有屬性?

<?xml version="1.0" encoding="utf-8" ?> 
<Location> 
    <Cities> 
    <City ZIP="8355">Aadorf</City> 
    <City ZIP="5000">Aarau</City> 
    <City ZIP="5004">Aarau</City> 
    <City ZIP="5032">Aarau Rohr</City> 
    <City ZIP="3270">Aarberg</City> 
    <City ZIP="4663">Aarburg</City> 
    <City ZIP="4912">Aarwangen</City> 
    <City ZIP="8607">Aathal-Seegräben</City> 
    <City ZIP="8522">Aawangen</City> 
    <City ZIP="1657">Abländschen</City> 
    <City ZIP="5646">Abtwil AG</City> 
    <City ZIP="9030">Abtwil SG</City> 
    </Cities> 
<Location> 

與...

Private Sub Workbook_Open() 

    Dim i As Integer 
    Dim NumberOfElements As Integer 
    Dim City As String 
    Dim xmlUrl As String 
    Dim xmlDoc As New DOMDocument 

    xmlUrl = "http://localhost:62231/dataHandling.asmx/GetAllCities" 
    xmlDoc.async = False 

    If xmlDoc.Load(xmlUrl) = False Then 
     MsgBox ("XML LOAD ERROR") 
    Else 

     NumberOfElements = xmlDoc.getElementsByTagName("City").Length 

     For i = 0 To NumberOfElements - 1 

      City = xmlDoc.SelectSingleNode("//Cities/City").Attributes.getNamedItem("ZIP").Text 

      City = City & " " & xmlDoc.getElementsByTagName("City").Item(i).Text 

      Tabelle2.Cells(i + 3, 1).Value = City 

     Next i 

    End If 

End Sub 

我從元素 「市」 的所有Innertextes。但每次都有相同的屬性「8355」。

City = xmlDoc.SelectSingleNode("//Cities/City").Attributes.getNamedItem("ZIP").Text 

此行應該是不同的,但我不知道我怎麼能循環打亂了整個XML閱讀每一個Attrbute。

回答

7

xmlDoc.SelectSingleNode("//Cities/City")總是選擇第一個節點。它不能每次都神奇地選擇下一個節點,它必須爲此讀取你的想法。

Private Sub Workbook_Open() 
    Dim City As String 
    Dim xmlUrl As String 
    Dim xmlDoc As New DOMDocument 
    Dim n As IXMLDOMNode 
    Dim i As Long 

    xmlUrl = "http://localhost:62231/dataHandling.asmx/GetAllCities" 
    xmlDoc.async = False 

    If Not xmlDoc.Load(xmlUrl) Then 
    MsgBox "XML LOAD ERROR" 
    Else 

    For Each n In xmlDoc.selectNodes("//Cities/City") 
     City = n.Attributes.getNamedItem("ZIP").Text 

     City = City & " " & n.Text 

     Tabelle2.Cells(i + 3, 1).Value = City 
     i = i + 1 
    Next 

    End If 

End Sub 
+0

太容易了!謝謝! – Anja 2013-05-14 08:52:00