2010-05-24 9 views
1

안녕하세요, 저는 VB.net에서 XML 구문 분석을 처음 사용하고 있습니다. 이것은 내가 가지고있는 XML 파일을 구문 분석하는 데 사용하고있는 코드입니다 : 자신을 VB.NET 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

어떤 오류가 발생합니까? – SLaks

답변

1

당신은 첫 번째 <ip> 요소를 닫지 않습니다.
따라서 루프가 반복 될 때 두 번째 코드는 첫 번째 코드 내에있는 <ip>번째 코드를 읽으려고합니다.

루프 끝에 ReadEndElement()을 두 번 호출해야합니다.

+0

의견을 주셔서 감사합니다. 나는 그것들을 두 번 끝에 추가했지만 다시 돌아 가지 않을 것입니다 (단 한번만) – StealthRT

+0

한 번만 호출 해보십시오. – SLaks

+0

그래, 그걸 시도해도 여전히 2 대신에 하나만 보여준다. 이전과 같은 오류가 난다. – StealthRT

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이 있습니다.