C# - экспорт содержимого списка в XML

У меня есть элемент управления списком, который содержит пары ключ-значение, разделенные знаком "=".

Пример:

горячая = холодная

быстро = медленно

высокий = низкий

синий = красный

У меня также есть кнопка, которая позволит пользователю экспортировать этот список в XML. Как я мог легко это сделать?

Как создать файл XML, в каком формате он должен быть?

4 ответа

Решение

Вы можете использовать LINQ:

var xml = new XElement("Items",
    from s in strings 
    let parts = s.Split('=')
    select new XElement("Item", 
        new XAttribute("Key", parts[0]), 
        parts[1]
    )
);

Вы можете экспортировать элементы в XML, используя LINQ, например:

<asp:ListBox ID="listBox" runat="server">
    <asp:ListItem Text="Joe" Value="1" />
    <asp:ListItem Text="Jay" value="2" />
    <asp:ListItem Text="Jim" Value="3" Selected="true" />
    <asp:ListItem Text="Jen" Value="4" />
</asp:ListBox>

РЕДАКТИРОВАТЬ: Заменить старый метод на метод, который использует LINQ to XML.

public XDocument ParseListBoxToXml()
{
    //build an xml document from the data in the listbox
    XDocument lstDoc = new XDocument(
        new XElement("listBox",
            new XAttribute("selectedValue", listBox.SelectedValue ?? String.Empty), new XAttribute("selectedIndex", listBox.SelectedIndex), new XAttribute("itemCount", listBox.Items.Count),
            new XElement("items",
                from ListItem item in listBox.Items
                select new XElement("item", new XAttribute("text", item.Text), new XAttribute("value", item.Value), new XAttribute("selected", item.Selected))
                )
            )
        );

    //return the xml document
    return lstDoc;
}

И вот вывод XML из вышеуказанного метода:

<listBox selectedValue="3" selectedIndex="2" itemCount="4">    
    <items>
        <item Text="Joe" Value="1" Selected="false" />
        <item Text="Jay" Value="2" Selected="false" />
        <item Text="Jim" Value="3" Selected="true" />
        <item Text="Jen" Value="4" Selected="false" />
    </items>
</listBox>

Посмотрите на этот учебник о том, как писать файлы XML.
Или использовать XElement как предложено SLaks и используйте его метод Save() для получения Xml-File/-Data. Вы также можете записать его прямо в поток ответов, используя этот метод.

Вот еще одна альтернатива.

XmlWriterSettings settings = new XmlWriterSettings();

settings.Indent = true;

settings.IndentChars = ("    ");

string fileName = @"C:\Temp\myXmlfile.xml";
using (XmlWriter writer = XmlWriter.Create(fileName, settings))
{              
    writer.WriteStartElement("items");

    for (int i = 0; i < listBox1.Items.Count; i++)
    {
        writer.WriteStartElement("item");
        string Key = listBox1.Items[i].ToString().Split('=')[0];
        string Value = listBox1.Items[i].ToString().Split('=')[1];

        writer.WriteElementString("key", Key);
        writer.WriteElementString("value", Value);
        writer.WriteEndElement();

    }
    writer.WriteEndElement();
    writer.Flush();
}
Другие вопросы по тегам