嘿,我不熟悉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
,但它似乎不起作用。它在第一次出现后一直出错。我一定错过了什么?
大卫
答案 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
从文件加载。