Как добавить данные в диктонар в c # - PullRequest
4 голосов
/ 13 мая 2010

Как добавить данные в диктонары из XML-файла

scenerio:

Я объявил такой диктонар как

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

и мой XML-файл похож на

 <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>

Мне нужно прочитать значения «ValOne» и «ValTwo», используя LINQ, и вставить их в объявленный выше диктонарный

и как добавить содержимое диктонары в представление списка, содержащее два столбца.

Пожалуйста, помогите мне сделать это

Заранее спасибо

Ответы [ 4 ]

6 голосов
/ 13 мая 2010

Для этого вы можете использовать Linq to XML и ToDictionary.

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
);

Эта конкретная перегрузка ToDictionary использует разные лямбда-выражения для извлечения ключей и значений для созданной коллекции.

4 голосов
/ 13 мая 2010

Предположительно, вы хотите, чтобы ValOne был ключом, а ValTwo - значением?

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

Предполагается, что вы прочитали XML-файл в XDocument или XElement

1 голос
/ 13 мая 2010

В этом случае вы можете использовать привязку данных. Посмотрите на эту статью:
http://www.codeproject.com/KB/miscctrl/DBListViewForV2.aspx

Все, что вам нужно сделать, это ...

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;
1 голос
/ 13 мая 2010
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...