Как мне создать и заполнить XML парами Key Value с помощью C #? - PullRequest
0 голосов
/ 11 июля 2019

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

Я пытался использовать XmlWriter, но не до конца понял, как его использовать и как с ним форматировать / записывать информацию.

<PULSE version="2.0">
    <TIME_STAMP value="" timezone="" />
    <CARD type="" version="" />
    <INFORMATION>
        <GENERAL key="" value="" />
    </INFORMATION>
    <DATA_PACKET time_offset="">
        <DATA key="1" value="1" />
        <DATA key="2" value="1" />
        <DATA key="3" value="0" />
    </DATA_PACKET>
    <DATA_PACKET time_offset="">
        <DATA key="1" value="1" />
        <DATA key="2" value="0" />
        <DATA key="3" value="0" />
    </DATA_PACKET>
</PULSE>`

Я хотел бы создать XML того же примера формата для использования в C #.

Ответы [ 3 ]

1 голос
/ 11 июля 2019

Использование xml Linq:

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

namespace ConsoleApplication120
{
    class Program
    {
        static void Main(string[] args)
        {
            Pulse pulse = new Pulse();

            XElement xPulse = new XElement("PULSE", new object[] {
                new XAttribute("version",pulse.version),
                new XElement("TIME_STAMP", new object[] {
                    new XAttribute("value", pulse.time.ToString()),
                    new XAttribute("timezone", pulse.timezone)
                }),
                new XElement("CARD", new object[] {
                    new XAttribute("type", pulse.cardType),
                    new XAttribute("version", pulse.version)
                }),
                new XElement("INFORMATION", new object[] {
                    new XElement("GENERAL", new object[] {
                        new XAttribute("key", pulse.key),
                        new XAttribute("value", pulse.keyValue)
                    })
                }),
                pulse.data.Select(x => new XElement("DATA_PACKET", new object [] {
                    new XAttribute("time_offset", x.time.ToString()),
                    x.data.Select(y => new XElement("Data", new object[] {new XAttribute("key", y.Key), new XAttribute("value", y.Value)}))
                }))
            });

        }
    }
    public class Pulse
    {
        public DateTime time { get; set; }
        public string timezone { get; set; }
        public string cardType { get; set; }
        public string version { get; set; }
        public string key { get; set; }
        public string keyValue { get; set; }
        public List<Data> data { get;set;}
    }
    public class Data
    {
        public DateTime time { get; set; }
        public List<KeyValuePair<int, int>> data { get; set; }
    }
}
0 голосов
/ 11 июля 2019
var xml = 
    new XElement("PULSE", new XAttribute("version", "2.0"),
        new XElement("TIME_STAMP", new XAttribute("value", "val"), new XAttribute("timezone", "val")),
        new XElement("CARD", new XAttribute("type", "val"), new XAttribute("version", "val")),
        new XElement("INFORMATION",
            new XElement("GENERAL", new XAttribute("key", "val"), new XAttribute("value", "val"))),
        new XElement("DATA_PACKET", new XAttribute("time_offset", "val"),
            from x in new Dictionary<string, string> {["1"] = "1", ["2"] = "2", ["3"] = "3" }
            select new XElement("DATA", new XAttribute("key", x.Key), new XAttribute("value", x.Value))));
0 голосов
/ 11 июля 2019

Основное использование XmlWriter выглядит следующим образом:

using (XmlWriter xmlWriter = XmlWriter.Create(...))
{
    xmlWriter.WriteStartDocument();

    xmlWriter.WriteStartElement("PULSE");
    xmlWriter.WriteAttribute("version", "2.0");

    xmlWriter.WriteStartElement("TIME_STAMP");
    xmlWriter.WriteAttribute("value", "");
    xmlWriter.WriteAttribute("timezone", "");
    xmlWriter.WriteEndElement();

    // And so on ....

    xmlWriter.WriteEndElement();

    xmlWriter.WriteEndDocument();
}

Это создаст XML-файл следующим образом:

<PULSE version="2.0">
    <TIME_STAMP value="" timezone="" />
</PULSE
...