2013-05-14 9 views
5

Dostałem z Webservice XML. Ogłosiłem to jako "DOMDocument". To jest mój XML. Teraz chcę przeczytać wszystkie atrybuty o nazwie "ZIP".Jak mogę odczytać wszystkie atrybuty z pliku XML z VBA?

<?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> 

Z ...

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 

uzyskać wszystkie Innertextes z elementów "Miasto". Ale za każdym razem ten sam atrybut "8355".

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

Ta linia powinna być inna, ale nie wiem, jak mogę pętlę rzucił cały XML, aby przeczytać każdy Attrbute.

Odpowiedz

7

xmlDoc.SelectSingleNode("//Cities/City") zawsze wybiera pierwszy węzeł. Za każdym razem nie może magicznie wybierać następnego węzła, musiałby za to czytać w myślach.

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

Tak łatwo! Dziękuję Ci! – Anja

Powiązane problemy