C #: Как перебрать собственный словарь для написания XElements в моем XDocument? - PullRequest
0 голосов
/ 30 декабря 2018

Я получил словарь с разными свойствами.Теперь я хочу создать XML-файл из этого словаря, но я не знаю, как можно перебирать каждую запись в моем словаре.В моем словаре есть 2 свойства, называемые количеством и ценой.

Так вот как выглядит мой код.

XDocument xDoc = new XDocument(
            new XElement("itemlist",
                    new XElement("item",
                        new XAttribute("article", "1"),
                        new XAttribute("quantity", "150"),
                        new XAttribute("price", "20"))));

xDoc.Save("C:/Users/User/Desktop/XMLOutput.xml");

Но я не хочу писать каждую запись в своем словареЯ искал решение, похожее на это:

XDocument xDoc = new XDocument(
            new XElement("itemlist",
            foreach (KeyValuePair<string, item> it in dictionary_items)
                    {                           
                        new XElement("item",
                           new XAttribute("article", it.Key),
                           new XAttribute("quantity", it.Value.quantity),
                           new XAttribute("price", it.Value.price)
                        ));
                    }

xDoc.Save("C:/Users/User/Desktop/XMLOutput.xml");

Итак, я хочу перебрать каждую запись в моем словаре и записать, как указано выше, в моем XML-файле.Как я могу это сделать?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Конечно.Вы можете использовать XStreamingElement для этого:

using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Linq;

namespace ConsoleApp31
{
    class Program
    {
        class Item
        {
            public int quantity { get; set; }
            public double price { get; set; }
        }
        static void Main(string[] args)
        {
            var dictionary_items = new Dictionary<string, Item>();

            dictionary_items.Add("abc", new Item() { quantity = 1, price = 3.3 });
            dictionary_items.Add("def", new Item() { quantity = 1, price = 3.3 });

            XDocument xDoc = new XDocument(
                new XStreamingElement("itemlist",
                     from it in dictionary_items
                     select new XElement("item",
                               new XAttribute("article", it.Key),
                               new XAttribute("quantity", it.Value.quantity),
                               new XAttribute("price", it.Value.price)))
                );
            Console.WriteLine(xDoc.ToString());
            Console.ReadKey();

        }
    }
}

выходы

<itemlist>
  <item article="abc" quantity="1" price="3.3" />
  <item article="def" quantity="1" price="3.3" />
</itemlist>
0 голосов
/ 30 декабря 2018
var list = new XElement("itemlist");
foreach (KeyValuePair<string, item> it in dictionary_items)
{                           
    list.Add(new XElement("item",
                           new XAttribute("article", it.Key),
                           new XAttribute("quantity", it.Value.quantity),
                           new XAttribute("price", it.Value.price)
                        )));
}

XDocument xDoc = new XDocument(list);
xDoc.Save("C:/Users/User/Desktop/XMLOutput.xml");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...