views:

162

answers:

1

Hi,

I'm trying to update an element in the XML document below:

Here's the code:

Dim xmldoc As XDocument = XDocument.Load(theXMLSource1)
        Dim ql As XElement = (From ls In xmldoc.Elements("LabService") _
                Where CType(ls.Element("ServiceType"), String).Equals("Scan") _
                Select ls.Element("Price")).FirstOrDefault


        ql.SetValue("23")
        xmldoc.Save(theXMLSource1)

Here's the XML file:

<?xml version="1.0" encoding="utf-8"?>
<!--Test XML with LINQ to XML-->

<LabSerivceInfo>

  <LabService>
    <ServiceType>Copy</ServiceType>
    <Price>1</Price>
  </LabService>

  <LabService>
    <ServiceType>PrintBlackAndWhite</ServiceType>
    <Price>2</Price>
  </LabService>

</LabSerivceInfo>

But, I got this error message:

Object reference not set to an instance of an object.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Error line:ql.SetValue("23")

Can you show me what the problem is? Thank you.

+2  A: 

xdoc is the document itself and only contains the root element. Therefore, xmldoc.Elements("LabService") doesn't return anything.

You need to write xmldoc.Root.Elements("LabService").

By the way, the best way to write the Where clause is Where ls.Element("ServiceType").Value = "Scan"

SLaks
Hi, SLaks. Thank you so much for the correction and suggestion. I'm saved for tonight. :D
Angkor Wat