2017-06-22 79 views
0

第一次使用XML和許多這方面的做法,但我正在通過它。我有一個簡單的XML文件,一個Item類和一個List。我想讀取XML文件並將其輸出到Item,然後將該Item添加到列表中。將XML讀入List <>

我已經想出瞭如何製作XML,閱讀它並將其隱約解析爲Item var,但我無法打包或弄清楚如何將其轉換爲將抓取的XML元素添加到我的List中。任何幫助將不勝感激。

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

} 
+0

https://stackoverflow.com/questions/16297583/converting-a-xml-to-generic-list – jayvee

回答

0

您可以使用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); 

我希望這會幫助你。

+0

完美謝謝! –

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

var item = ...(node => mew item ...).ToList()Item一個List<item>這個代碼的地方。因此,致電ToString你必須通過每個人的名單。

出於這個原因,考慮改變了他的名字「項小號」 ..

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

     } 
+0

謝謝我改變了我的反映演員。 –

+0

當您使用Value時,您的代碼中item爲null時將會收到異常。如果你有空價格,那麼你可以使用小數?在查詢中和在類中。 – jdweng

相關問題