Как написать файл XML из ListView в C # - PullRequest
1 голос
/ 01 ноября 2010

У меня есть ListView элемент управления, такой как

alt text

Мне нужно сохранить данные из этого ListView в XML-файл.

Так чтоXML-файл будет выглядеть как

<root>
 <Child Name ="A1" val1="1" val2="0"/>
 <Child Name ="A2" val1="1" val2="2"/>
 <Child Name ="A3" val1="1" val2="3"/>
 <Child Name ="A4" val1="1" val2="4"/>
 <Child Name ="A5" val1="1" val2="5"/>
 <Child Name ="A6" val1="6" val2="0"/>
 <Child Name ="A7" val1="7" val2="0"/>
</root>

, если данные хранятся в некоторых List или Dictionary, тогда я знаю, что сделать это с помощью XML для LINQ

Но как мне это сделатьэто из ListView

XDocument XD=new XDocument(new XElement("root",........// what i have to do here.......

Пожалуйста, помогите мне сделать это ...

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 01 ноября 2010

Вы можете запросить подэлементы представления списка вместе с заголовками его столбцов:

XDocument document = new XDocument(new XElement("root",
    from item in yourListView.Items.Cast<ListViewItem>()
    select new XElement("Child",
        item.SubItems.Cast<ListViewSubItem>()
            .Select((subitem, i) => new XAttribute(
                i == 0 ? "Name" : yourListView.Columns[i].Text.ToLower(),
                subItem.Text)))));

РЕДАКТИРОВАТЬ: Поскольку ни ListViewItemCollection , ни ListViewSubItemCollection Операторы запросов поддержки из коробки, нам нужно вызвать Cast<T>(), чтобы иметь возможность использовать их.

0 голосов
/ 13 декабря 2012

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

public static bool ExportListViewlToXML(ListView listview, String filePath, String fileName)
    {
        FileStream fileStream;
        StreamWriter streamWriter;
        XmlTextWriter xmlTextWriter;

        try
        {
            // overwrite even if it already exists
            fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None);

            streamWriter = new StreamWriter(fileStream);
            xmlTextWriter = new XmlTextWriter(streamWriter);
            xmlTextWriter.Formatting = Formatting.Indented;
            xmlTextWriter.WriteStartDocument();
            xmlTextWriter.WriteStartElement("Items");

            const int SUBITEM1_POS = 0;
            const int SUBITEM2_POS = 1;
            const int SUBITEM3_POS = 2;

            for (int i = 0; i < listview.Items.Count; i++)
            {
                String currentSubItem1 = listview.Items[i].SubItems[SUBITEM1_POS].Text;
                String currentSubItem2 = listview.Items[i].SubItems[SUBITEM2_POS].Text;
                String currentSubItem3 = listview.Items[i].SubItems[SUBITEM3_POS].Text;

                xmlTextWriter.WriteStartElement("Item");
                xmlTextWriter.WriteAttributeString("subitem1", currentSubItem1.ToString());
                xmlTextWriter.WriteAttributeString("subitem2", currentSubItem2.ToString());
                xmlTextWriter.WriteAttributeString("subitem3", currentSubItem3.ToString());
                xmlTextWriter.WriteEndElement();
            }

            xmlTextWriter.WriteEndDocument();
            xmlTextWriter.Flush();
            xmlTextWriter.Close();

            return true;
        }
        catch (IOException ex)
        {
            // do something about your error
            return false;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...