2016-08-12 4 views
0

Ich habe eine XML-Datei, die von einer API stammt und ich bin nicht in der Lage, die Feldnamen zu lesen. Ich kann die Werte jedes Feldes mit dem unten stehenden Code abrufen, aber ich kann nicht herausfinden, wie die Feldnamen auch erhalten werden.VB.net XML Parsing

Wie Sie sehen können, haben einige der Felder keinen Wert, der manchmal und nicht anders angezeigt wird, also muss ich wissen, welche Werte unter welchen Feldnamen.

<?xml version="1.0" encoding="UTF-8"?> 
<sfd:payload mlns:sfd="http://www.wrt.com/types"model="http://ost.bro.com/api/r1"> 
    <sfd:field name="ptp.systemid"> 
    <sfd:value>Waiting for life</sfd:value> 
    </sfd:field> 
    <sfd:field name="ptp..itmid"> 
    <sfd:value>101602175821</sfd:value> 
    </sfd:field> 
    <sfd:field name="ptp.itmsi"> 
    <sfd:value>KTHDBATCHINGSPEED1802-A0ZSTKE2</sfd:value> 
    </sfd:field> 
    <sfd:field name="ptp.info"> 
    <sfd:value>PNC Code 10055017 K4354353534534534345</sfd:value> 
    </sfd:field> 
    <sfd:field name="ptp.start"/> 
    <sfd:field name="ptp.end"/> 
    </sfd:payload> 

Dim xmllines As String = str.ReadToEnd 
str.Close() 

Dim output As StringBuilder = New StringBuilder() 

Using reader As XmlReader = XmlReader.Create(New StringReader(xmllines)) 
    Do While (reader.Read()) 
     Select Case reader.NodeType 
      Case XmlNodeType.Text 'Display the text in each element. 
       ListBox1.Items.Add(reader.Value) 
     End Select 
    Loop 
End Using 
+0

Verwenden Sie 'XElement'; Es ist _vatly_ einfacher zu bedienen. Beachten Sie, dass Sie auch 'XNamespace' benötigen. – SLaks

Antwort

0

In Ihrem XML ist name ein Attribut. Sie können die GetAttribute-Methode verwenden. Zum Beispiel:

Using reader As XmlReader = XmlReader.Create(New StringReader(xmllines)) 
     Do While (reader.Read()) 
      Select Case reader.NodeType 
       Case XmlNodeType.Text 'Display the text in each element. 
        Dim fieldName As String = reader.GetAttribute("name") 
        ListBox1.Items.Add(fieldName & " = " & reader.Value) 
      End Select 
     Loop 
    End Using 

Natürlich ist das Deklarieren der Zeichenfolge Variable nicht erforderlich. Sie können reader.GetAttribute("name") überall dort verwenden, wo Sie es brauchen.