Разобрать XML и заполнить список

Я новичок в С#.

Я хочу разработать C# List box in Windows Form. Я нашел эту ссылку полезной. Но ввод в поле списка будет XML следующего формата:

<LISTBOX_ST>
<item><CHK></CHK><SEL>00001</SEL><VALUE>val01</VALUE></item>
<item><CHK></CHK><SEL>00002</SEL><VALUE>val02</VALUE></item>
<item><CHK></CHK><SEL>00003</SEL><VALUE>val03</VALUE></item>
<item><CHK></CHK><SEL>00004</SEL><VALUE>val04</VALUE></item>
<item><CHK></CHK><SEL>00005</SEL><VALUE>val05</VALUE></item>
</LISTBOX_ST>

XML должен быть проанализирован и должен быть заполнен в поле списка. Когда выбран конкретный элемент в списке, должен быть возвращен его КОД (т.е. значение узла SEL).

Любые указатели/предложения о том, как эффективно анализировать и отображать в списке.

XML исходит от SAP и, как ожидается, будет содержать от 300 до 400 записей.


person jai    schedule 10.05.2010    source источник


Ответы (2)


Вы можете использовать Linq to XML, чтобы сделать это так.

XDocument xmldoc = XDocument.Load(xmlStream);
var items = (from i in xmldoc.Descendants("item")
             select new { Item = i.Element("SEL").Value, Value = i.Element("VALUE").Value }).ToList();

listBox1.DataSource = items;
listBox1.DisplayMember = "Item";
listBox1.ValueMember = "Value";
person Chris Taylor    schedule 10.05.2010

Используя Linq-to-XML, вы можете сделать это:

public partial class item
{
    public object CHK { get; set; }
    public int SEL { get; set; }
    public string VALUE { get; set; }
}

и где-то в вашем коде:

XDocument lbSrc = XDocument.Load("yourfile.xml");

List<item> _lbList = new List<item>();

foreach (XElement item in lbSrc.Descendants("item"))
{
   _lbList.Add(new item { CHK= item.Element("CHK").Value, 
                          SEL = Convert.ToInt32(item.Element("SEL").Value), 
                          VALUE = item.Element("VALUE").Value });
 }

а затем назначьте это своему списку:

lbYourListbox.DataSource = _lbList;
lbYourListbox.DisplayMember = "VALUE";
lbYourListbox.ValueMember = "SEL";

Это должно сделать это!

person marc_s    schedule 10.05.2010