将XML读入List<>

时间:2017-06-22 05:06:18

标签: c# xml list

首次使用XML以及其中的许多实践,但是,我正在通过它。我有一个简单的XML文件,一个Item类和一个List。我想读取XML文件并将其输出到Item,并将该Item添加到List。

我已经弄清楚如何制作XML,阅读它并模糊地将其解析为Item var但我无法解析或弄清楚如何转换它以将抓取的XML元素添加到我的列表中。任何帮助都会感激不尽。

代码XML:`

<?xml version="1.0" encoding="utf-8" ?>
<ITEMS>
  <ITEM>
    <ITEMNAME>Apple</ITEMNAME>
    <ITEMPRICE>2.50</ITEMPRICE>
  </ITEM>
  <ITEM>
    <ITEMNAME>Dark Chocolate</ITEMNAME>
    <ITEMPRICE>1.25</ITEMPRICE>
  </ITEM>
</ITEMS>`

档案:

    internal class Item
{
    private string _itemName;
    private decimal _itemPrice;

    public Item(string itemName, decimal itemPrice)
    {
        _itemName = itemName;
        _itemPrice = itemPrice;
    }

    public Item()
    {
    }

    public string ItemName
    {
        get => _itemName;
        set => _itemName = value;
    }

    public decimal ItemPrice
    {
       get { return _itemPrice;}
        set { _itemPrice = value; }
    }

    public override string ToString()
    {
        // String representation.
        return this._itemName + " " + this._itemPrice.ToString("C");
    }
}

方法:

    public static void CreateItemsList(List<Item> itemsList)
{
    var doc = XDocument.Load(@"..\..\ItemsXML.xml");

    var item = doc.Root
        .Descendants("ITEM")
        .Select(node => new Item
        {
            ItemName = node.Element("ITEMNAME").Value,
            ItemPrice = decimal.Parse(node.Element("ITEMPRICE").Value)
        })
        .ToList();
    Console.WriteLine(item.ToString());

}

3 个答案:

答案 0 :(得分:0)

foreach (var oneItem in item)
    Console.WriteLine(oneItem.ToString());

var item = ...(node => new item ... ).ToList()此代码位于ItemList<item>。因此,要调用每个人的ToString,您必须浏览列表。

出于这个原因,请考虑将其姓名更改为&#34;项 s &#34;。

答案 1 :(得分:0)

代码正常,只是ToString()没有。做了一些小的改进:

       public static void CreateItemsList(List<Item> itemsList)
        {
            var doc = XDocument.Load(FILENAME);

            var item = doc.Root
                .Descendants("ITEM")
                .Select(node => new Item()
                {
                    ItemName = (string)node.Element("ITEMNAME"),
                    ItemPrice = (decimal)node.Element("ITEMPRICE")
                })
                .ToList();
            Console.WriteLine(string.Join(",",item.Select(x => x.ToString())));

        }

答案 2 :(得分:0)

您可以将ref用于itemsList参数。

    List<Item> itemsList = new List<Item>();
    CreateItemsList(ref itemsList);

使用时

$

我希望它会对你有所帮助。