2017-06-22 16 views
0

これはXMLで初めての作業であり、多くの実践がありますが、私はそれを試しています。私は単純なXMLファイル、Itemクラス、Listを持っています。私は、XMLファイルを読んでそれをItemに出力し、そのItemをListに追加したいと思います。XMLをリストに読み込む<>

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

} 
+0

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

答えて

0

itemsListパラメータにはrefを使用できます。使用

List<Item> itemsList = new List<Item>(); 
    CreateItemsList(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()))); 

     } 

+0

ありがとうございました! –

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

var item = ...(node => mew item ...).ToList()ItemList<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

関連する問題