2017-06-22 8 views
0

ersten Mal mit XML arbeiten und eine Menge der Praktiken in diesem, aber ich arbeite durch. Ich habe eine einfache XML-Datei, eine Item-Klasse und eine Liste. Ich möchte die XML-Datei lesen und sie in Item ausgeben und dieses Item zur Liste hinzufügen.Lesen von XML in Liste <>

Ich habe herausgefunden, wie man das XML macht, es liest und es vage auf ein Item var analysiert, aber ich kann nicht umwandeln oder herausfinden, wie man das gepackte XML-Element zu meiner Liste hinzufügt. Jede Hilfe wäre dankbar.

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

Item:

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

Methode:

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

Antwort

0

können Sie ref für itemsList Parameter verwenden.

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

     } 

Bei Verwendung

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

Ich hoffe, es wird Ihnen helfen.

+0

Perfect danke! –

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

var item = ...(node => mew item ...).ToList() dieser Code in Item ein List<item>. Um also ToString jedes Einzelnen anzurufen, müssen Sie die Liste durchlaufen.

Aus diesem Grunde betrachten, seinen Namen zu "Artikel s" Ändern ..

0

Der Code arbeitet, nur das ToString() war es nicht. Machte einige kleinere Verbesserungen:

 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

danke ich habe meine geändert, um die Besetzung zu reflektieren. –

+0

Wenn Sie Wert verwenden, erhalten Sie Ausnahmen, wenn das Element mit Ihrem Code null ist. Wenn Sie Nullpreise haben, können Sie dezimal verwenden? in der Abfrage und in der Klasse. – jdweng

Verwandte Themen