2013-05-14 22 views
5

Tôi nhận được từ một Webservice một XML. Tôi tuyên bố nó như là một "DOMDocument". Đây là XML của tôi. Bây giờ tôi muốn đọc tất cả các thuộc tính có tên "ZIP".Làm thế nào tôi có thể đọc tất cả các thuộc tính từ một XML với 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> 

Với ...

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 

tôi nhận được tất cả Innertextes từ "thành phố" Elements. Nhưng mỗi lần có cùng thuộc tính "8355".

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

Dòng này phải khác, nhưng tôi không biết làm thế nào tôi có thể lặp lại toàn bộ XML để đọc mọi Attrbute.

Trả lời

7

xmlDoc.SelectSingleNode("//Cities/City") luôn chọn nút đầu tiên. Nó không thể kỳ diệu chọn nút tiếp theo mỗi lần, nó sẽ phải đọc tâm trí của bạn cho điều đó.

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

Thật dễ dàng! Cảm ơn bạn! – Anja

Các vấn đề liên quan