Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

selectsinglenode problem parsing xml in VB.net

Posted on 2006-03-21
13
Medium Priority
?
1,444 Views
Last Modified: 2013-11-19
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.  
0
Comment
Question by:alisman
  • 5
  • 5
  • 3
13 Comments
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 16250486
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.
0
 

Author Comment

by:alisman
ID: 16250687
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?
0
 
LVL 35

Expert Comment

by:YZlat
ID: 16250702
n.SelectSingleNode(xpath) might be Nothing
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 35

Expert Comment

by:YZlat
ID: 16250719
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
0
 
LVL 52

Expert Comment

by:Carl Tawn
ID: 16250735
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.
0
 

Author Comment

by:alisman
ID: 16250954
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">
0
 
LVL 35

Expert Comment

by:YZlat
ID: 16251020
I think your xpath is incorrect
0
 
LVL 35

Expert Comment

by:YZlat
ID: 16251032
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
0
 
LVL 35

Expert Comment

by:YZlat
ID: 16251049
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
0
 

Author Comment

by:alisman
ID: 16251103
no dice.  this xpath expression is returning "Nothing"    ???

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

Author Comment

by:alisman
ID: 16251172
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.
0
 
LVL 52

Accepted Solution

by:
Carl Tawn earned 2000 total points
ID: 16251325
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)
0
 

Author Comment

by:alisman
ID: 16251369
thank you very much carl.
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article covers the basics of the Sass, which is a CSS extension language. You will learn about variables, mixins, and nesting.
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).
Suggested Courses

810 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question