Click to See Complete Forum and Search --> : Removing Nodes in C# using LINQ to XML


noseparker
April 15th, 2011, 06:34 AM
Hi all,

I cannot figure out what is wrong with this method i am writing, it is supposed to go through the xml file and remove all "Day" nodes that have a specified "Ticker". Here is the xml:

<?xml version="1.0" encoding="utf-8" ?>
- <Days>
- <Day>
<Ticker>MSFT</Ticker>
<Date>14th Apr 2011</Date>
<Open>25.5</Open>
<High>25.5</High>
<Low>25.5</Low>
<Close>25.5</Close>
<Volume>22000000</Volume>
<AdjClose>34.56</AdjClose>
</Day>
- <Day>
<Ticker>MSFT</Ticker>
<Date>14th Apr 2011</Date>
<Open>25.5</Open>
<High>25.5</High>
<Low>25.5</Low>
<Close>25.5</Close>
<Volume>22000000</Volume>
<AdjClose>34.56</AdjClose>
</Day>
- <Day>
<Ticker>TSCO</Ticker>
<Date>14th Apr 2011</Date>
<Open>25.5</Open>
<High>25.5</High>
<Low>25.5</Low>
<Close>25.5</Close>
<Volume>22000000</Volume>
<AdjClose>34.56</AdjClose>
</Day>
- <Day>
<Ticker>TSCO</Ticker>
<Date>14th Apr 2011</Date>
<Open>25.5</Open>
<High>25.5</High>
<Low>25.5</Low>
<Close>25.5</Close>
<Volume>22000000</Volume>
<AdjClose>34.56</AdjClose>
</Day>
</Days>

Here is the C#:

public void DeleteTickerData(string ticker)
{
XDocument xmldoc = XDocument.Load("Data.xml");
var days = from day in xmldoc.Descendants("Day")
select new
{
Ticker = day.Element("Ticker").Value,
Date = day.Element("Date").Value,
Open = day.Element("Open").Value,
High = day.Element("High").Value,
Low = day.Element("Low").Value,
Close = day.Element("Close").Value,
Volume = day.Element("Volume").Value,
AdjClose = day.Element("AdjClose").Value,
};


foreach (var day in days)
{
if (day.Ticker == ticker)
{
xmldoc.Element("Day").Remove();
}
}

xmldoc.Save("products.xml");
}

The line "xmldoc.Element("Day").Remove();" gives this error:

Object reference not set to an instance of an object.

Please let me know what stupid mistake i have made.

noseparker