开发者

How to write XML file from a ListView in C#

开发者 https://www.devze.com 2023-01-23 02:38 出处:网络
i\'m having a ListView control like I need to store the data from this ListView to an Xml File. So the xml file will be like

i'm having a ListView control like

How to write XML file from a ListView in C#

I need to store the data from this ListView to an Xml File.

So the xml file will be like

<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>

if the data is stored in some List or Dictionary , then i开发者_C百科 know to do this using XML to LINQ

But how do i do this from a ListView

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

Please help me to do this...

Thanks in advance


You can query the list view subitems along with its column headers:

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

EDIT: Since neither ListViewItemCollection nor ListViewSubItemCollection support query operators out of the box, we need to call Cast<T>() to be able to use them.


Here is a simple example. The goal here is to do it using XmlTextWriter. Of course, this sample needs to be modified to suit your particular file I/O and XML-formatting needs:

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;
        }
    }
0

精彩评论

暂无评论...
验证码 换一张
取 消