VB.NET XML解析器循环

时间:2010-05-24 16:35:38

标签: xml vb.net

嘿,我不熟悉VB.net上的XML解析。这是我用来解析我有的XML文件的代码:

Dim output As StringBuilder = New StringBuilder()

Dim xmlString As String = _
    "<ip_list>" & _
        "<ip>" & _
            "<ip>192.168.1.1</ip>" & _
            "<ping>9 ms</ping>" & _
            "<hostname>N/A</hostname>" & _
         "</ip>" & _
         "<ip>" & _
             "<ip>192.168.1.6</ip>" & _
             "<ping>0 ms</ping>" & _
             "<hostname>N/A</hostname>" & _
         "</ip>" & _
   "</ip_list>"

Using reader As XmlReader = XmlReader.Create(New StringReader(xmlString))
        'reader.ReadStartElement("ip_list")

        Do Until reader.EOF
            reader.ReadStartElement("ip_list")
            reader.ReadStartElement("ip")
            reader.ReadStartElement("ip")
            reader.MoveToFirstAttribute()

            Dim theIP As String = reader.Value.ToString
            reader.ReadToFollowing("ping")
            Dim thePing As String = reader.ReadElementContentAsString().ToString
            reader.ReadToFollowing("hostname")
            Dim theHN As String = reader.ReadElementContentAsString().ToString

            MsgBox(theIP & " " & thePing & " " & theHN)
            reader.ReadEndElement()
        Loop

        reader.Close()
    End Using

我自己放了do until reader.EOF,但它似乎不起作用。它在第一次出现后一直出错。我一定错过了什么?

大卫

2 个答案:

答案 0 :(得分:1)

您从未关闭第一个<ip>元素 因此,当循环重复时,它会尝试读取第一个中的第二个<ip>

您需要在循环结束时调用ReadEndElement()两次。

答案 1 :(得分:1)

如果您能够使用.NET 3.5,我建议使用XML文字和LINQ语法。

Dim ips = From xe In XElement.Parse(xmlString).<ip> _
          Select New With {.IP = xe.<ip>.Value, _
                           .Ping = xe.<ping>.Value, _
                           .HostName = xe.<hostname>.Value}
'if you only want one
Dim firstIp = ips.First()

您还可以使用XElement.Load从文件加载。