private void button1_Click(object sender, EventArgs e) { string cesta = ""; StreamWriter radky = null; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář");//nastaví cestu if (!Directory.Exists(cesta))//pokud adresář neexistuje vytvoří ho Directory.CreateDirectory(cesta); radky = new StreamWriter(Path.Combine(cesta, "pokus.txt"));//vytvoří nebo otevře soubor radky.WriteLine("První");//zapíše do řádků radky.WriteLine("Druhý"); radky.WriteLine("Atd."); radky.Flush(); //vyčistí buffer } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } finally { if(radky!=null) radky.Close(); //soubor zavře } }Zápis do souboru pomocí using, který soubor otevře a zavře sám. Pokud soubor neexistuje, vytvoří se. Pokud existuje, bude přepsán.
private void button3_Click(object sender, EventArgs e) { string cesta = ""; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář");//nastaví cestu if (!Directory.Exists(cesta))//pokud adresář neexistuje vytvoří ho Directory.CreateDirectory(cesta); using (StreamWriter radky = new StreamWriter(Path.Combine(cesta, "pokus.txt")))//vytvoří nebo otevře soubor { radky.WriteLine("První");//zapíše do řádků radky.WriteLine("Druhý"); radky.WriteLine("Atd."); radky.Flush(); //vyčistí buffer } // sám soubor zavře } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } }Připsání textu do existujícího souboru se docílí pomocí 2. parametru konstruktoru StreamWriter
private void button4_Click(object sender, EventArgs e) { string cesta = ""; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář");//nastaví cestu if (!Directory.Exists(cesta))//pokud adresář neexistuje vytvoří ho Directory.CreateDirectory(cesta); using (StreamWriter radky = new StreamWriter(Path.Combine(cesta, "pokus.txt"),true))// otevře soubor a začne do něho přidávat nové řádky { radky.WriteLine("další");//zapíše do řádků radky.WriteLine("a znovu"); radky.WriteLine("Atd."); radky.Flush(); //vyčistí buffer } // sám soubor zavře } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } }Čtení ze souboru.
private void button4Nacti_Click(object sender, EventArgs e) { string cesta = ""; string vypis="nic"; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář"); //nastaví cestu using (StreamReader radky = new StreamReader(Path.Combine(cesta, "pokus.txt"))) // otevře soubor { vypis = radky.ReadToEnd(); //čte vše } // sám soubor zavře } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } finally { textBox1.Text = vypis; } }
private void button5CSV_Click(object sender, EventArgs e) { string cesta = ""; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář"); //nastaví cestu if (!Directory.Exists(cesta))//pokud adresář neexistuje vytvoří ho Directory.CreateDirectory(cesta); using (StreamWriter radky = new StreamWriter(Path.Combine(cesta, "pokus.csv"), true)) //vytvoří nebo otevře soubor a řádky připíše { string[] zapis = { textBox2csv.Text, textBox3csv.Text, textBox4csv.Text }; string radek = String.Join(";", zapis); //vytvoří řádek se středníky radky.WriteLine(radek); //zapíše do řádků radky.Flush(); //vyčistí buffer } // sám soubor zavře } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } }Načtení souboru.
private void button5načteniCSV_Click(object sender, EventArgs e) { string cesta = ""; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář"); //nastaví cestu using (StreamReader radky = new StreamReader(Path.Combine(cesta, "pokus.csv"))) // otevře soubor { string s; while ((s = radky.ReadLine()) != null) // čte řádek po řádku { string[] rozdeleno = s.Split(';'); // rozdělí string řádku podle středníků string jmeno = rozdeleno[0]; string prijmeni = rozdeleno[1]; string vek = rozdeleno[2]; label1csv.Text +=jmeno +"\n"; label2csv.Text += prijmeni + "\n"; label3csv.Text += vek + "\n"; } } // sám soubor zavře } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } }
Formát XML se dá využít na ukládání nejrůznějších typů dat s prakticky jakoukoliv strukturou. Lze ho použít na ukládaní jednoduchého seznamu až po menší databáze. S XML soubory umí pracovat skoro každý systém a proto se velmi často používá k výměně dat mezi různými systémy. Jeho výhoda je, že není vázán na žádný software, ani operační systém.
Syntaktická pravidla XML jsou velice jednoduchá.
Tagy používané v HTML dokumentu jsou předdefinované(<p>, <h1>, atd.).
V XML si každý vytvoří tagy vlastní, které si může libovolně pojmenovat
(nedoporučuje se používat diakritika).
První řádka v dokumentu definuje verzi XML a kódování znaků.
První element v dokumentu představuje rodičovský (kořenový) element.
Další elementy jsou potomci rodiče (elementy podřízené rodiči). Tyto elementy můžou mít potomky atd.
<rodic> <potomek> <podpotomek>...</podpotomek> </potomek> </rodic>Elementy v XML musí mít uzavírací tag.
<polozka id="5" nazev="rohlík" mnozstvi="50" cena="0,90" />XML zachovává tzv. bílé znaky.
<!-- Toto je komentář -->
Název XML elementu musí dodržovat tato pravidla:
private void button1_Click(object sender, EventArgs e) { string cesta = ""; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář"); //nastaví cestu if (!Directory.Exists(cesta)) //pokud adresář neexistuje vytvoří ho Directory.CreateDirectory(cesta); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; //nastavit odsazování using (XmlWriter xml = XmlWriter.Create(Path.Combine(cesta, "pokus.xml"), settings)) //vytvoří soubor "pokus.xml" { xml.WriteStartDocument(); // hlavička xml.WriteStartElement("objednavky"); // otevření kořenového elementu // zápis první objednávky xml.WriteStartElement("objednavka"); //vytvoří otvírací element xml.WriteAttributeString("ID", "1"); xml.WriteAttributeString("stav", "příjato"); xml.WriteElementString("jmeno", "Jan"); //jako otvírací element, ale bez ukončovacího xml.WriteElementString("prijmeni", "Novák"); xml.WriteStartElement("polozky"); xml.WriteStartElement("polozka"); xml.WriteAttributeString("id", "5"); xml.WriteAttributeString("nazev", "rohlík"); xml.WriteAttributeString("mnozstvi", "50"); xml.WriteAttributeString("cena", "0,90"); xml.WriteEndElement(); xml.WriteStartElement("polozka"); xml.WriteAttributeString("id", "9"); xml.WriteAttributeString("nazev", "houska"); xml.WriteAttributeString("mnozstvi", "20"); xml.WriteAttributeString("cena", "3"); xml.WriteEndElement(); xml.WriteStartElement("polozka"); xml.WriteAttributeString("id", "12"); xml.WriteAttributeString("nazev", "chleba"); xml.WriteAttributeString("mnozstvi", "8"); xml.WriteAttributeString("cena", "25"); xml.WriteEndElement(); xml.WriteEndElement(); xml.WriteStartElement("sleva"); xml.WriteEndElement(); xml.WriteEndElement(); //uzavírací element xml.WriteStartElement("objednavka") // zápis druhé objednávky xml.WriteStartElement("objednavka"); xml.WriteAttributeString("ID", "2"); xml.WriteAttributeString("stav", "odesláno"); xml.WriteElementString("jmeno", "Josef"); xml.WriteElementString("prijmeni", "Malý"); xml.WriteStartElement("polozky"); xml.WriteStartElement("polozka"); xml.WriteAttributeString("id", "235"); xml.WriteAttributeString("nazev", "sekačka"); xml.WriteAttributeString("mnozstvi", "1"); xml.WriteAttributeString("cena", "5999"); xml.WriteEndElement(); xml.WriteEndElement(); xml.WriteStartElement("sleva"); xml.WriteAttributeString("typ", "akce"); xml.WriteAttributeString("procent", "10"); xml.WriteEndElement(); xml.WriteEndElement(); // uzavření kořenového elementu xml.WriteEndDocument(); // konec dokument xml.Flush(); } // sám soubor zavře } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } }Vytvořený XML soubor.
<?xml version="1.0" encoding="utf-8"?> <objednavky> <objednavka ID="1" stav="příjato"> <jmeno>Jan</jmeno> <prijmeni>Novák</prijmeni> <polozky> <polozka id="5" nazev="rohlík" mnozstvi="50" cena="0,90" /> <polozka id="9" nazev="houska" mnozstvi="20" cena="3" /> <polozka id="12" nazev="chleba" mnozstvi="8" cena="25" /> </polozky> <sleva /> </objednavka> <objednavka ID="2" stav="odesláno"> <jmeno>Josef</jmeno> <prijmeni>Malý</prijmeni> <polozky> <polozka id="235" nazev="sekačka" cena="5999" /> </polozky> <sleva typ="akce" procent="10" /> </objednavka> </objednavky>
private void vypisXML_Click(object sender, EventArgs e) { string cesta = ""; string vypis = ""; string element = ""; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář");//nastaví cestu using (XmlReader xmlSoubor = XmlReader.Create((Path.Combine(cesta, "pokus.xml"))))// otevře soubor pro čtení { while (xmlSoubor.Read())//čte soubor řádek po řádku - vrací false pokud je vše přečteno { if (xmlSoubor.NodeType == XmlNodeType.Element) { element = xmlSoubor.Name; vypis += "\n" + xmlSoubor.Name; //připíše název aktuálního elementu if (xmlSoubor.Name == "objednavka") { vypis += " číslo" + xmlSoubor.GetAttribute("ID"); //připíše atribut id vypis += "\n stav " + xmlSoubor.GetAttribute("stav"); } if (xmlSoubor.Name == "polozka") { vypis += " číslo" + xmlSoubor.GetAttribute("id"); vypis +=" "+xmlSoubor.GetAttribute("nazev"); vypis += " množství" + xmlSoubor.GetAttribute("mnozstvi"); vypis += " cena" + xmlSoubor.GetAttribute("cena"); } if (xmlSoubor.Name == "sleva") { if (xmlSoubor.HasAttributes)// pokud má element atributy, tak je vypíše { vypis += " " + xmlSoubor.GetAttribute("typ"); vypis += " " + xmlSoubor.GetAttribute("procent") + "%"; } } } if (xmlSoubor.NodeType == XmlNodeType.Text)//připíše hondnotu elementu { switch (element) { case "jmeno": vypis += " " + xmlSoubor.Value; break; case "prijmeni": vypis += " " + xmlSoubor.Value; break; } } if (xmlSoubor.NodeType==XmlNodeType.EndElement && xmlSoubor.Name=="objednavka")//konec objednávky { vypis += "\n\n\n"; } } } // sám soubor zavře } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } finally { labelVypisXML.Text = vypis; } }
XmlDocument xmlDocument = new XmlDocument();A načte do paměti:
private void XML_Load(object sender, EventArgs e) { string cesta = ""; try { cesta = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "VytvořenýAdresář", "pokus.xml"); //nastaví cestu xmlDocument.Load(cesta); //načte XML soubor foreach (XmlNode s in xmlDocument.SelectNodes("/objednavky/objednavka")) //prochází elementy podle podle zadané cesty { listBoxObjednavky.Items.Add("Objednávka č. " + s.Attributes["ID"].Value); } } catch (Exception g) { MessageBox.Show("Nastala výjimka" + g.Message); } }A čteme co chceme:
private void listBoxObjednávky_SelectedIndexChanged(object sender, EventArgs e) { if (listBoxObjednavky.SelectedIndex == -1) return; //pokud není nic vybráno, vyskočí ven XmlNode objednavka = xmlDocument.SelectNodes("/objednavky/objednavka")[listBoxObjednavky.SelectedIndex]; //načte objednávku podle indexu textBoxJmeno.Text = objednavka.SelectSingleNode("jmeno").InnerText; //načte jméno textBoxPrijmeni.Text = objednavka.SelectSingleNode("prijmeni").InnerText; //načte příjmení double cena = 0; listViewPolozky.Items.Clear(); foreach (XmlNode s in objednavka.SelectNodes("polozky/polozka")) { ListViewItem polozky = new ListViewItem(); //vytvoří položku ListView polozky.Text = s.Attributes["id"].Value; //načte první hodnotu polozky.SubItems.Add(s.Attributes["nazev"].Value); //přidá druhou hodnotu polozky.SubItems.Add(s.Attributes["mnozstvi"].Value); //přídá třetí hodnotu try { polozky.SubItems.Add(objednavka.SelectSingleNode("sleva").Attributes["procent"].Value); //načte čtvrtou hodnotu } catch { polozky.SubItems.Add("0"); } double cenaZaKus=double.Parse(s.Attributes["cena"].Value); polozky.SubItems.Add(cenaZaKus.ToString("c")); //přidá pátou hodnotu zformátovanou na měnu listViewPolozky.Items.Add(polozky); //přidá položku do seznamu cena += cenaZaKus * double.Parse(s.Attributes["mnozstvi"].Value); } labelStav.Text = objednavka.Attributes["stav"].Value; labelCena.Text = cena.ToString("c"); }
if (ulozto.ShowDialog() == DialogResult.OK) { try { XmlDocument dokument = new XmlDocument();// vytvoření souboru XmlDeclaration xmlDeklarace = dokument.CreateXmlDeclaration("1.0", "UTF-8", null); //deklarace xml XmlElement adr = dokument.DocumentElement; dokument.InsertBefore(xmlDeklarace, adr); // vytvoření deklarace string hlavickaText = "korenovyElement"; XmlElement hlavicka = dokument.CreateElement(hlavickaText); // vytvoření kořenového elementu dokument.AppendChild(hlavicka); // pojmenování elementu dokument.Save(ulozto.FileName); //vytvoření a uložení xml } catch (Exception g) { MessageBox.Show(g.Message); // pokud nastane chyba vypíše ji } }
private void buttonPridej_Click(object sender, EventArgs e) { XmlDocument novy = new XmlDocument(); novy.Load(cesta);// načtení souboru XmlNode element = novy.DocumentElement; //načte hlavní element XmlElement objednavka = novy.CreateElement("objednavka");//vytvoří element XmlAttribute ID = novy.CreateAttribute("ID"); //vytvoření atributu XmlAttribute stav = novy.CreateAttribute("stav"); //vytvoření atributu ID.Value = idint.ToString();//přizazení hodnoty atributu idint++; stav.Value = textBoxStav.Text;//přizazení hodnoty atributu objednavka.Attributes.Append(ID);//přidání atributu k elementu objednavka.Attributes.Append(stav);//přidání atributu k elementu element.AppendChild(objednavka);//přidání elementu do souboru XmlElement jmeno = novy.CreateElement("jmeno");//vytvoří element jmeno.InnerText = textBoxJmeno.Text;//nastaví text elementu objednavka.AppendChild(jmeno);//přidání elementu do souboru XmlElement prijmeni = novy.CreateElement("prijmeni");//vytvoří element prijmeni.InnerText = textBoxPrijmeni.Text;//nastaví text elementu objednavka.AppendChild(prijmeni);//přidání elementu do souboru XmlElement polozky = novy.CreateElement("polozky");//vytvoří element objednavka.AppendChild(polozky);//přidání elementu do souboru XmlElement polozka = novy.CreateElement("polozka");//vytvoří element XmlAttribute id = novy.CreateAttribute("id"); //vytvoření atributu XmlAttribute nazev = novy.CreateAttribute("nazev"); //vytvoření atributu XmlAttribute mnozstvi = novy.CreateAttribute("mnozstvi"); //vytvoření atributu XmlAttribute cena = novy.CreateAttribute("cena"); //vytvoření atributu id.Value = textBoxid.Text; nazev.Value = textBoxNazev.Text; mnozstvi.Value = textBoxMnozstvi.Text; cena.Value = textBoxCena.Text; polozka.Attributes.Append(id);//přidání atributu k elementu polozka.Attributes.Append(nazev);//přidání atributu k elementu polozka.Attributes.Append(mnozstvi);//přidání atributu k elementu polozka.Attributes.Append(cena);//přidání atributu k elementu polozky.AppendChild(polozka);//přidání elementu do souboru XmlElement sleva = novy.CreateElement("sleva");//vytvoří element objednavka.AppendChild(sleva);//přidání elementu do souboru novy.Save(cesta);//uložení souboru }
XDocument myDoc = XDocument.Load(cesta); XElement way = myDoc.Root; way.Element("Cesta").Add(new XElement("way", new XElement("pěšky", 8), new XElement("kolmo", 4), new XElement("autem", 1) )); myDoc.Save(cesta);
private void buttonUloz_Click(object sender, EventArgs e) { XmlDocument edituj = new XmlDocument(); edituj.Load(cesta); // načtení souboru //způsob 1. XmlNodeList list = edituj.SelectNodes("/objednavky/objednavka"); foreach (XmlNode s in list) { if (s.Attributes["ID"].Value == idint.ToString())//vybírá se podle ID 1,2,3 atd. { s.Attributes["stav"].Value = textBoxStav.Text; s.SelectSingleNode("jmeno").InnerText = textBoxJmeno.Text; s.SelectSingleNode("prijmeni").InnerText = textBoxPrijmeni.Text; XmlNode polozka = s.SelectSingleNode("polozky/polozka"); polozka.Attributes["id"].Value = textBoxid.Text; polozka.Attributes["nazev"].Value = textBoxNazev.Text; polozka.Attributes["mnozstvi"].Value = textBoxMnozstvi.Text; polozka.Attributes["cena"].Value = textBoxCena.Text; edituj.Save(cesta); } } //způsob 2. XmlNode list1 = edituj.SelectNodes("/objednavky/objednavka")[idint - 1];//vybírá se podle objektu 0,1,2 atd. list1.Attributes["stav"].Value = textBoxStav.Text; list1.SelectSingleNode("jmeno").InnerText = textBoxJmeno.Text; list1.SelectSingleNode("prijmeni").InnerText = textBoxPrijmeni.Text; XmlNode polozka1 = list1.SelectSingleNode("polozky/polozka"); polozka1.Attributes["id"].Value = textBoxid.Text; polozka1.Attributes["nazev"].Value = textBoxNazev.Text; polozka1.Attributes["mnozstvi"].Value = textBoxMnozstvi.Text; polozka1.Attributes["cena"].Value = textBoxCena.Text; edituj.Save(cesta); }
private void button1_Click(object sender, EventArgs e) { XmlDocument edituj = new XmlDocument(); edituj.Load(cesta); // načtení souboru XmlElement element = edituj.DocumentElement; //vytvoření stromu hlavních elementů //způsob 1. XmlNodeList list = edituj.SelectNodes("/objednavky/objednavka"); foreach (XmlNode s in list) { if (s.Attributes["ID"].Value == idint.ToString()) //vybírá se podle ID 1,2,3 atd. { element.RemoveChild(s); // mazání elementu edituj.Save(cesta); } } //způsob 2. XmlNode list1 = edituj.SelectNodes("/objednavky/objednavka")[idint - 1]; //vybírá se podle objektu 0,1,2 atd. element.RemoveChild(list1); // mazání elementu edituj.Save(cesta); }