All I want is to retrieve 3 values from an XML return from a web service

All I need to get from this return is
messages/resultCode,
messages/message/text
ARBCreateSubscriptionResponse/subscriptionId

I can parse using substring but this is (supposedly)  the hard way. How do I use XmlDocument to grab JUST those values?

Ive tried
Dim sMsgList As XmlNodeList = oXMLDoc.GetElementsByTagName("messages"),
and I get an invalid characters error ...

I've tried stepping through child nodes (but I can't seem to get to 'messages/message/text ')

so after 5 hours of trying different things with mixed results, I asking the experts. PLEASE do not send me to links; I googled 'parse xmldocument +VB.net' and 'read xmldocument +VB.net' and other iterations of search and have looked at about 30 of them.


<?xml version="1.0" encoding="utf-8"?>
<ARBCreateSubscriptionResponse xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
  <refId>Sample</refId>
  <messages>
    <resultCode>Ok</resultCode>
    <message>
      <code>I00001</code>
      <text>Successful.</text>
    </message>
  </messages>
  <subscriptionId>100748</subscriptionId>
</ARBCreateSubscriptionResponse>

Open in new window

LyndaPostalAsked:
Who is Participating?
 
PaulHewsConnect With a Mentor Commented:
Sample code:  It's complicated a bit by the default namespace.
Imports System.Xml
 
Public Class Form1
 
 
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim xmlDoc As New XmlDocument
        xmlDoc.Load("C:\temp\test.xml")
        xmlDoc.PreserveWhitespace = True
 
        Dim nsMgr As New XmlNamespaceManager(xmlDoc.NameTable)
        nsMgr.AddNamespace("ns", "AnetApi/xml/v1/schema/AnetApiSchema.xsd")
 
        Dim Path() As String = {"messages/resultCode", "messages/message/text", "subscriptionId"}
        For i As Integer = 0 To Path.GetUpperBound(0)
            Dim node As XmlNode = xmlDoc.DocumentElement.SelectSingleNode("//ns:" & Path(i).Replace("/", "/ns:"), nsMgr)
            If Not node Is Nothing Then
                Debug.WriteLine(node.InnerText)
            End If
        Next
    End Sub
End Class

Open in new window

0
 
LyndaPostalAuthor Commented:
and I thank you so much. It works perfectly! So I can understand what you did and why it worked: ... Where can I find out more about 'default namespace' and XML? So many (maybe all??) web service returns use them? A link would be great.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.