?
Solved

Select Single Node in VB.Net problems

Posted on 2007-03-29
12
Medium Priority
?
635 Views
Last Modified: 2008-01-09
Hi,

I'm having problems removing nodes from an XML file in vb.net 2003.  I took my existing functioning VB6 code and altered this to reference the correct objects etc.  However i just keep getting an error;

System.NullReferenceException: Object reference not set to an instance of an object.  I am using the wrong object for oRefNode  & oNode?

This is driving me mad an any ideas would be gratefully appreciated.
Thanks,
G

CODE BELOW
---------------------------------------------------------------------------------------------------

Dim mdocNewXmlDoc2 As XmlDocument
Dim oRefNode As XmlNode
Dim oNode As XmlNode

mdocNewXmlDoc2 = New XmlDocument
        mdocNewXmlDoc2.Load("C:\Projects\CIS\xmlOut.xml")
        oRefNode = mdocNewXmlDoc2.SelectSingleNode("/GovTalkMessage/Body/IRenvelope/IRheader")
        oNode = mdocNewXmlDoc2.SelectSingleNode("/GovTalkMessage/Body/IRenvelope/IRheader/IRmark")
      Try
            If Not oNode.InnerText = vbNull Then
                oRefNode.RemoveChild(oNode)
            End If
      Catch esc As SystemException
            MsgBox("A system error ocurred" & vbNewLine & esc.ToString(), MsgBoxStyle.Critical)
            Console.WriteLine("************************************************")
            Console.WriteLine(esc.ToString())
     End Try
0
Comment
Question by:1114godders
  • 8
  • 4
12 Comments
 
LVL 18

Expert Comment

by:DarrenD
ID: 18816184
The only thing that I do differently is

Dim oNodeRoot, oNode As XmlNode

' Load the root node with the entire document.
oNodeRoot = oXMLDOMDoc.DocumentElement

' Retrieve the required node using xPath.
oNode = oNodeRoot.SelectSingleNode("/Blah.Blah/BlehElement")

Darren
0
 
LVL 18

Expert Comment

by:DarrenD
ID: 18816189
Never mind the . in the path.  Once your path is correct.
0
 

Author Comment

by:1114godders
ID: 18816628
Darren,

many thanks for that, however i am still getting an "System.NullReferenceException: Object reference not set to an instance of an object" on the RemoveChild function, i know i'm not far away from getiting this to work, but it feels like much further at the moment.

And the objectoNode is still null after;
oNode = oRefNode.SelectSingleNode("/GovTalkMessage/Body/IRenvelope/IRheader/IRmark")

mdocNewXmlDoc2 = New XmlDocument
mdocNewXmlDoc2.Load("C:\Projects\CIS\xmlOut.xml")
oRefNode = mdocNewXmlDoc2.DocumentElement
oNode = oRefNode.SelectSingleNode("/GovTalkMessage/Body/IRenvelope/IRheader/IRmark")
        Try
            oRefNode.RemoveChild(oNode)
        Catch esc As SystemException
            MsgBox("A system error ocurred" & vbNewLine & esc.ToString(), MsgBoxStyle.Critical)
            Console.WriteLine(esc.ToString())
        End Try
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
LVL 18

Expert Comment

by:DarrenD
ID: 18816707
Can you put up you XML file??
0
 

Author Comment

by:1114godders
ID: 18816732
Sure,
<?xml version="1.0" encoding="UTF-8"?>
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
  <EnvelopeVersion>2.0</EnvelopeVersion>
  <Header>
    <MessageDetails>
      <Class>IR-CIS-VERIFY</Class>
      <Qualifier>request</Qualifier>
      <Function>submit</Function>
      <CorrelationID/>
      <Transformation>XML</Transformation>
      <GatewayTest>1</GatewayTest>
      <GatewayTimestamp/>
    </MessageDetails>
    <SenderDetails>
      <IDAuthentication>
        <SenderID>CIS161</SenderID>
        <Authentication>
          <Method>clear</Method>
          <Role>principal</Role>
          <Value>testing1</Value>
        </Authentication>
      </IDAuthentication>
    </SenderDetails>
  </Header>
  <GovTalkDetails>
    <Keys>
      <Key Type="TaxOfficeNumber">123</Key>
      <Key Type="TaxOfficeReference">R161</Key>
    </Keys>
    <ChannelRouting>
      <Channel>
        <URI>0772</URI>
        <Product>HRWorks CIS</Product>
      </Channel>
    </ChannelRouting>
  </GovTalkDetails>
  <Body>
    <IRenvelope xmlns="http://www.govtalk.gov.uk/taxation/CISrequest">
      <IRheader>
        <Keys>
          <Key Type="TaxOfficeNumber">123</Key>
          <Key Type="TaxOfficeReference">R161</Key>
        </Keys>
        <PeriodEnd>2008-04-05</PeriodEnd>
        <Principal>
          <Contact>
            <Name>
              <Ttl>Mr</Ttl>
              <Fore>Brian</Fore>
              <Sur>Cooper</Sur>
            </Name>
            <Email Preferred="yes">brian.cooper@wealden.net</Email>
            <Telephone Mobile="no" Preferred="no" Type="work">
              <Number>0208 3647177</Number>
            </Telephone>
            <Fax Mobile="no" Preferred="no" Type="work">
              <Number>0208 3647181</Number>
            </Fax>
          </Contact>
        </Principal>
        <DefaultCurrency>GBP</DefaultCurrency>
        <IRmark Type="generic">                            </IRmark>
        <Sender>Employer</Sender>
      </IRheader>
      <CISrequest>
        <Contractor>
          <UTR>9325648154</UTR>
          <AOref>123PP87654321</AOref>
        </Contractor>
        <Subcontractor>
          <Action>verify</Action>
          <Type>company</Type>
          <TradingName>Plastered</TradingName>
          <WorksRef>ZA001</WorksRef>
          <CRN>NE987654</CRN>
        </Subcontractor>
        <Declaration>yes</Declaration>
      </CISrequest>
    </IRenvelope>
  </Body>
</GovTalkMessage>
0
 
LVL 18

Expert Comment

by:DarrenD
ID: 18817675
Hi,

There is nothing wrong with what you are doing to pull out the nodes.

The problem is with the Namespaces. These seem to be causing a problem. If you take them out it works fine.

I'm don't know off the top of my head how to fix this but there is probably some setting or something.

Sorry I can't be of more help.

Darren

Code:

        Dim mdocNewXmlDoc2 As New XmlDocument
        Dim oRootNode As XmlNode
        Dim oNode As XmlNode


        Try
            mdocNewXmlDoc2.Load("C:\Projects\CIS\xmlOut.xml")

            oRootNode = mdocNewXmlDoc2.DocumentElement()

            oNode = oRootNode.SelectSingleNode("/GovTalkMessage/Body/IRenvelope/IRheader/IRmark")


            If Not oNode Is Nothing Then
                oRootNode.RemoveChild(oNode)
            End If
        Catch esc As SystemException
            MsgBox("A system error ocurred" & vbNewLine & esc.ToString(), MsgBoxStyle.Critical)
            Console.WriteLine("************************************************")
            Console.WriteLine(esc.ToString())
        End Try
0
 

Author Comment

by:1114godders
ID: 18822307
Darren,

Many thanks for that, by the Namespaces do you mean the ones in VB.Net?  If i remove the namespaces won't the code just not run at all, im a bit confused here?

G
0
 
LVL 18

Accepted Solution

by:
DarrenD earned 375 total points
ID: 18822510
Sorry,

What I ment was if you remove the

xmlns="http://www.govtalk.gov.uk/taxation/CISrequest"
and
xmlns="http://www.govtalk.gov.uk/CM/envelope"

from the XML file it works fine so there must be some workaround for this.

I don't know what it is though.

If you take out these lines from the XML your the code will work fine

Cheers,

Darren
0
 

Author Comment

by:1114godders
ID: 18822794
Very strange, will need to think about this one a while, but i'll give you points for at least figuring out why it wasn't working.
0
 
LVL 18

Expert Comment

by:DarrenD
ID: 18823126
I know it's really wierd

Have a look here

http://pluralsight.com/blogs/keith/archive/2005/10/19/15714.aspx
0
 
LVL 18

Expert Comment

by:DarrenD
ID: 18823148
That article shows how to strip out the xmlns using regular expressions further down the post.

Probably better off reading the entire article comments and all.

Darren
0
 
LVL 18

Expert Comment

by:DarrenD
ID: 18823179
Here's another article

http://www.devx.com/DevX/Tip/21337
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Question has a verified solution.

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

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
Introduction In my previous article (http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/SSIS/A_9150-Loading-XML-Using-SSIS.html) I showed you how the XML Source component can be used to load XML files into a SQL Server database, us…
Is your organization moving toward a cloud and mobile-first environment? In this transition, your IT department will encounter many challenges, such as navigating how to: Deploy new applications and services to a growing team Accommodate employee…
The video provides a quick and easy steps to migrate MBOX file to well known Outlook PST and Office 365. Besides this, it also supports and migrates more than 20 email clients of MBOX which include AppleMail, Opera, Thunderbird and SeaMonkey effortl…
Suggested Courses
Course of the Month6 days, 22 hours left to enroll

593 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