我有一个XML文件,其中包含有关服务器的数据。国家和服务器的IP。
<?xml version="1.0"?>
<servers>
<server>
<location>Belgium</location>
<ip>192.168.0.1</ip>
</server>
<server>
<location>The Netherlands</location>
<ip>127.0.0.6</ip>
</server>
</servers>
我想在列表框的一行中将位置名称+ IP + ping添加到IP中,依此类推每个服务器。
这是我的代码到目前为止,但它只告诉我的位置。我不知道如何将IP和ping附加到IP。
Dim xr As XmlReader = XmlReader.Create("http://127.0.0.1/servers.xml")
Do While xr.Read()
If xr.NodeType = XmlNodeType.Element AndAlso xr.Name = "location" Then
lsbServers.Items.Add(xr.ReadElementString)
Else
xr.Read()
End If
Loop
如何将IP和ping添加到列表框中的位置?
答案 0 :(得分:3)
XmlReader
类对某些任务很有用,但是,按照设计,它一次只检查一个节点。在这种情况下,您需要以随机访问方式一次访问多个元素,使用XmlDocument
或XDocument
类会更容易。例如:
Dim doc As New XmlDocument()
doc.Load("http://127.0.0.1/servers.xml")
For Each serverNode As XmlNode In doc.SelectNodes("/servers/server")
Dim location As String = serverNode.SelectSingleNode("location").InnerText
Dim ip As String = serverNode.SelectSingleNode("ip").InnerText
Next
或者,
Dim doc As XDocument = XDocument.Load("http://127.0.0.1/servers.xml")
For Each serverElement As XElement In doc.<servers>.<server>
Dim location As String = serverElement.<location>.Value
Dim ip As String = serverElement.<ip>.Value
Next
然后,当您将项目添加到列表框中时,您可以将数据连接成一个字符串和/或将其格式化,例如:
lsbServers.Items.Add(location & " - " & ip))
或者:
lsbServers.Items.Add(String.Format("{0} ({1})", location, ip))
但是,如果列表中的每个项目有多个数据,您可能需要考虑使用支持显示多列数据的控件,例如ListView
或DataGrid
控件。 (为了显示ListView
控件中的列,您需要将View
属性设置为Details
。)
答案 1 :(得分:1)
我会使用LINQ to XML:
Dim xr As XmlReader = XmlReader.Create("http://127.0.0.1/servers.xml")
Dim xDoc As XDocument = XDocument.Load(xr)
For Each server as XElement In xDoc.Root.Elements("server")
Dim location As String = CType(server.Element("location"), String)
Dim ip As String = CType(server.Element("ip"), String)
' your ping logic goes here '
Dim ping as String = GetPing(ip)
lsbServers.Items.Add(String.Format("{0} - {1} - {2}", location, ip, ping))
Next