Загрузка и сохранение XML файла в режиме просмотра списка - PullRequest
0 голосов
/ 13 июля 2020

У меня небольшая проблема при загрузке моего XML файла в Listview. Он не загружает все значения, а загружает только отдельные узлы. не могли бы вы сказать мне, в чем проблема с моим l oop, чтобы загрузить значения? или какое-либо предложение, чтобы сделать это лучше и работать?

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

Вот файл xml:

 <?xml version="1.0" encoding="utf-8"?>
<Settings>
  <title><![CDATA[Episode 1]]></title>
  <duration><![CDATA[59.33]]></duration>
  <resolution><![CDATA[1280x560]]></resolution>
  <title><![CDATA[Episode 2]]></title>
  <duration><![CDATA[01.04.25]]></duration>
  <resolution><![CDATA[1280x560]]></resolution>
</Settings>
    private void button1_Click(object sender, EventArgs e)
    {
        var file = @"C:\Users\MARK\Desktop\__TEST\SAMPLE.xml";

        if (File.Exists(file))
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(file);
            XmlNodeList topM = doc.SelectNodes("Settings");

            LV.BeginUpdate();
            foreach (XmlElement element in topM)
            {
                ListViewItem items = new ListViewItem();

                XmlNodeList Title = element.GetElementsByTagName("title");
                for (int i = 0; i < Title.Count; i++)
                {
                    items.Text = Title[i].InnerText;
                }

                XmlNodeList Duration = element.GetElementsByTagName("duration");
                for (int i = 0; i < Duration.Count; i++)
                {
                    items.SubItems.Add(Duration[i].InnerText);
                }

                XmlNodeList Resolution = element.GetElementsByTagName("resolution");
                for (int i = 0; i < Resolution.Count; i++)
                {
                    items.SubItems.Add(Resolution[i].InnerText);
                }

                LV.Items.Add(items);
            }
            LV.EndUpdate();
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        var file = @"C:\Users\MARK\Desktop\__TEST\SAMPLE.xml";

        using (XmlTextWriter xml = new XmlTextWriter(file, Encoding.UTF8))
        {
            xml.Formatting = System.Xml.Formatting.Indented;
            xml.WriteStartDocument();
            xml.WriteStartElement("Settings");

            foreach (ListViewItem i in LV.Items)
            {
                xml.WriteStartElement("title"); 
                xml.WriteCData(i.Text.ToString()); 
                xml.WriteEndElement();

                xml.WriteStartElement("duration"); 
                xml.WriteCData(i.SubItems[1].Text); 
                xml.WriteEndElement();
                
                xml.WriteStartElement("resolution"); 
                xml.WriteCData(i.SubItems[2].Text); 
                xml.WriteEndElement();
            }

            xml.WriteEndElement();
            xml.WriteEndDocument();
        }
    }

1 Ответ

0 голосов
/ 13 июля 2020

После часов поиска и анализа. Это то, что я нашел с помощью BinaryFormatter.

Это может помочь и другим:)

   private void SaveBinary(ListView lv)
    {
        using (SaveFileDialog sfd = new SaveFileDialog())
        {
            sfd.Filter = "*.bin|*.bin";
            sfd.RestoreDirectory = true;

            if (sfd.ShowDialog() == DialogResult.OK)
            {
                ListViewItem[] items = new ListViewItem[lv.Items.Count];
                lv.Items.CopyTo(items, 0);
                // Serialize the items and save it to a file.
                using (FileStream fs = File.Create(sfd.FileName))
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(fs, items);
                }
                this.Text = "Data has been saved";
            }
        }
    }
    private void LoadBinary(ListView lv)
    {
        using (OpenFileDialog ofd = new OpenFileDialog())
        {
            ofd.Filter = "*.bin|*.bin";
            ofd.RestoreDirectory = true;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                ListViewItem[] items = null;
                // Deserialize the items from the binary file.
                using (FileStream fs = File.OpenRead(ofd.FileName))
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    items = (ListViewItem[])bf.Deserialize(fs);
                }

                lv.Items.Clear();
                lv.BeginUpdate();
                // Load the items into the listView1.Items collection.
                lv.Items.AddRange(items);
                lv.EndUpdate();
            }
            this.Text = "Data has been loaded";
        }
    }

источник: https://www.experts-exchange.com/questions/27293776/Load-and-save-the-content-of-a-listview-to-binary-file.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...