views:

151

answers:

5

Dear all,

How to add data to dictonary from xml file

scenerio:

I've declared a dictonary like

 Dictonary<string,string> SampleDict=new Dictonary<string,string>();

and my xml file is like

 <Data>
   <Element ValOne="1" ValTwo="0" />
   <Element ValOne="2" ValTwo="2" />
   <Element ValOne="3" ValTwo="4" />
   <Element ValOne="4" ValTwo="6" />
   <Element ValOne="5" ValTwo="8" />
   <Element ValOne="6" ValTwo="10" />
   <Element ValOne="7" ValTwo="12" />
   <Element ValOne="8" ValTwo="14" />
   <Element ValOne="9" ValTwo="16" />
   <Element ValOne="10" ValTwo="18" />
</Data>

i need to read the value of "ValOne" and "ValTwo" using LINQ and insert the same into the above declared dictonary

and how to add the contents of the dictonary to a listview which contains two columns.

Please help me to do this

Thanks in advance

+4  A: 

Presumably you want ValOne to be the key and ValTwo to be the value?

document.Descendants("Element")
    .ToList()
    .ForEach(e => SampleDict[e.Attribute("ValOne").Value] = e.Attribute("ValTwo").Value);

This assumes you have read your XML file into an XDocument or XElement

jeffora
e.Attribute["ValTwo"].Value should be e.Attribute("ValTwo").Value.Notice [] changed to ().
MasterGaurav
Good catch, fixed :)
jeffora
@jeffora: Thank you
Pramodh
Please see my updated question
Pramodh
+1  A: 
XElement allData = XElement.Load("File.xml");
var els = allData.Descendants("Element");

foreach(var xe in els)
{
   SampleDict[xe.Attribute("ValOne").Value] = xe.Attribute("ValTwo").Value;
}
MasterGaurav
@MasterGaurav:Thank you
Pramodh
Please see my updated question
Pramodh
See my formatted answer...
MasterGaurav
+2  A: 

Seems already discussed similar one on forum HERE

Incognito
@Incognito:Thank you
Pramodh
+6  A: 

You can use Linq to XML and ToDictionary for this.

var doc = XDocument.Load("path to xml");
doc.Elements("Element").ToDictionary(
  elem => elem.Attribute("ValOne").Value, //Dictionary key
  elem => elem.Attribute("ValTwo").Value  //Dictionary value
);

This particular overload of ToDictionary uses different lambdas to extract keys and values for the generated collection.

Igor Zevaka
@Igor Zevaka: Thank you
Pramodh
Please see my updated question
Pramodh
+1 I prefer this way :)
jeffora
I think MasterGaurav provides an adequate solution to the question of binding the data to a listview.
Igor Zevaka
+1  A: 

You may want to use data binding in that case. Have a look at this article:
http://www.codeproject.com/KB/miscctrl/DBListViewForV2.aspx

All you need to do is...

var items = from xe in els
  select {
    ValOne = xe.Attribute("ValOne").Value,
    ValTwo = xe.Attribute("ValTwo").Value
  }

var arr = items.ToArray();

//private DBListView dataBoundListView;
//dataBoundListView.DataSource = this.bindingSource1;
this.bindingSource1.DataSource = arr;
MasterGaurav