【问题标题】:Reading XML into List<>将 XML 读入 List<>
【发布时间】:2017-06-22 05:06:18
【问题描述】:

第一次使用 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());

}

【问题讨论】:

标签: c# xml list


【解决方案1】:

您可以将 ref 用于 itemsList 参数。

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

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

            Console.WriteLine(string.Join(",", itemsList.Select(x => x.ToString())));

        }

使用时

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

    代码工作正常,只是 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())));
    
            }
    

    【讨论】:

    • 当您使用 Value 时,您的代码中 item 为 null 时会出现异常。如果您有空价格,那么您可以使用十进制吗?在查询和课堂上。
    【解决方案3】:
    foreach (var oneItem in item)
        Console.WriteLine(oneItem.ToString());
    

    var item = ...(node =&gt; new item ... ).ToList() 这个代码放在ItemList&lt;item&gt; 中。因此,要调用每个人的ToString,您必须遍历列表。

    因此,考虑将他的名字改为“items”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多