selectsinglenode problem parsing xml in VB.net

Dim path = "......"
 Dim xmldoc As New XmlDocument

        Try

            xmldoc.Load(path)
            makeNewDataSet(xmldoc.DocumentElement("resultset"))
        Catch ex As Exception
        End Try

Then, in the subroutine "makenewdataset", I try to access values use selectsinglenode to grab field nodes by attribute "name"
n is a node representing a record.

Dim xpath = "/field[@name='first']"
Response.Write("--" & n.SelectSingleNode(xpath).InnerText)

This for some reason just shuts down the code.  It doesn't throw an error. It just mysteriously breaks a loop.  
alismanAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Carl TawnSystems and Integration DeveloperCommented:
It possibly is throwing an error. The exception will bubble to the calling method, which in your sample has nothing the the exception handler, so it will do nothing.

Can you provide a bit more info ? Maybe the rest of the makeNewDataSet method and a sample of the XML you are using.
alismanAuthor Commented:
you're right.   it was throwing an exception.  

Object reference not set to an instance of an object.

on this code:

Response.Write("--" & n.SelectSingleNode(xpath).InnerText)

why would it do that?
YZlatCommented:
n.SelectSingleNode(xpath) might be Nothing
Introduction to R

R is considered the predominant language for data scientist and statisticians. Learn how to use R for your own data science projects.

YZlatCommented:
try replacing

Response.Write("--" & n.SelectSingleNode(xpath).InnerText)

with this

Dim node as XmlNode=n.SelectSingleNode(xpath)
If Not node Is Nothing Then
        Response.Write("--" & node.InnerText)
End if
Carl TawnSystems and Integration DeveloperCommented:
As YZlat says, its probably not finding the node.

We'd need to see a sample of the XML to see why you're not getting anything.
alismanAuthor Commented:
here's the xml.   i just gave you the xml down to relevant node, which is record.   it is valid.   please ignore the dashes at the beginning of nodes.  those are from ieexplorer.   you'll see that records are childnodes of resultset.  i am passing the resultset node to the madedataset function.  thanks to all.

 <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
  <!DOCTYPE fmresultset (View Source for full doctype...)>
- <fmresultset xmlns="http://www.filemaker.com/xml/fmresultset" version="1.0">
  <error code="0" />
  <product build="03/01/2005" name="FileMaker Web Publishing Engine" version="7.0v5" />
  <datasource database="elected_officials_sync" date-format="MM/dd/yyyy" layout="elected_officials" table="elected_officials" time-format="HH:mm:ss" timestamp-format="MM/dd/yyyy HH:mm:ss" total-count="7923" />
- <metadata>
  <field-definition auto-enter="no" global="no" max-repeat="1" name="ID" not-empty="yes" result="number" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="first" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="last" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="prefix" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="email" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="state" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="LD" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="kind" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="web" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="middle" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="emailMethod" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="emailformstring" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="address1" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="address2" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="city" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="zip" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="phone" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="fax" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="party" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="institution" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="suffix" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="active" not-empty="yes" result="number" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="address_state" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="no" global="no" max-repeat="1" name="abbreviation" not-empty="no" result="text" type="normal" />
  <field-definition auto-enter="yes" global="no" max-repeat="1" name="creationDate" not-empty="no" result="timestamp" type="normal" />
  </metadata>
- <resultset count="7923" fetch-size="25">
- <record mod-id="0" record-id="23232">
- <field name="ID">
  <data>400001</data>
  </field>
- <field name="first">
  <data>James</data>
  </field>
- <field name="last">
  <data>Elkins</data>
  </field>
- <field name="prefix">
  <data>Representative</data>
  </field>
- <field name="email">
  <data>Rep_Jim_Elkins@legis.state.ak.us</data>
  </field>
- <field name="state">
  <data>AK</data>
  </field>
- <field name="LD">
  <data>AK_001</data>
  </field>
- <field name="kind">
  <data>SH</data>
  </field>
- <field name="web">
  <data>http://w3.legis.state.ak.us/house/24/ELN.php</data>
  </field>
- <field name="middle">
  <data>B.</data>
  </field>
- <field name="emailMethod">
  <data>e</data>
  </field>
- <field name="emailformstring">
YZlatCommented:
I think your xpath is incorrect
YZlatCommented:
try

Dim xpath = "//field[@name='first']"

Dim node as XmlNode=n.SelectSingleNode(xpath)
If Not node Is Nothing Then
        Response.Write("--" & node.InnerText)
End if
YZlatCommented:
actually use this:

Dim xpath = "//field[@name='first']"

Dim node as XmlNode=n.SelectSingleNode(xpath)
Dim dataNode As XmlNode
If Not node Is Nothing Then
        dataNode=node.SelectSingleNode("data")
        Response.Write("--" & dataNode.InnerText)
End if
alismanAuthor Commented:
no dice.  this xpath expression is returning "Nothing"    ???

 Dim xpath = "//field[@name='first']"
alismanAuthor Commented:
the following lines of code work find:

Response.Write(n.ChildNodes.Item(0).Attributes(0).InnerText)

Response.Write(n.ChildNodes.Item(0).FirstChild.InnerText)


So, it's something wrong with the selectSingleNode and the xpath expression.
Carl TawnSystems and Integration DeveloperCommented:
Its the old namespace problem again. You have a default namespace set for your document, which means that you need to use a NameSpaceManager in order to alias the namespace.

This is a sample of the process, you should be able to adapt your makeNewDataSet method to suit:

            XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
            ns.AddNamespace("x", "http://www.filemaker.com/xml/fmresultset");               // Apply prefix of 'x' to the namespace

            XmlNode node = doc.SelectSingleNode("//x:field[@name='first']", ns);             // Assuming an XmlDocument named doc
                                                                                                                              // Note the "x:" prefix in front of the node name
            Response.Write("--" & node.InnerText)

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
alismanAuthor Commented:
thank you very much carl.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Web Languages and Standards

From novice to tech pro — start learning today.