Avatar billede pfp Nybegynder
11. marts 2004 - 01:14 Der er 9 kommentarer og
1 løsning

Skrive til xml fil

Hej,

Jeg leger lidt med xml og C#. Jeg har følgende eksempel med XmlTextReader fra MSDN:


try
{
  XmlTextWriter myXmlTextWriter = new XmlTextWriter ("projects.xml", null);

  myXmlTextWriter.Formatting = Formatting.Indented;
  myXmlTextWriter.WriteStartDocument(false);
  myXmlTextWriter.WriteStartElement("bookstore");
  myXmlTextWriter.WriteStartElement("book", null);
  myXmlTextWriter.WriteElementString("title", null, textBox1.Text);
  myXmlTextWriter.WriteElementString("price", "7.99");
  myXmlTextWriter.WriteEndElement();
  myXmlTextWriter.WriteEndElement();

  //Write the XML to file and close the myXmlTextWriter
  myXmlTextWriter.Close();
}

catch(Exception exc)
{
  MessageBox.Show("Der er opstået en fejl:" + "\n" + exc.ToString());
}

Men på denne måde overskriver jeg jo bare hele indholdet af mit dokument hver eneste gang. Jeg ville gerne bare tilføje endnu et <book> element.

Nogen der har erfaring her?

/pfp
Avatar billede arne_v Ekspert
11. marts 2004 - 07:27 #1
Du læser det gamle XML dokument ind, du tilføjer et element og udskriver dokumentet.
Avatar billede arne_v Ekspert
11. marts 2004 - 08:16 #2
Noget a la:

XmlDocument doc = new XmlDocument();
doc.Load("old.xml");
XmlNode add = doc.CreateElement("name");
add.AppendChild(doc.CreateTextNode("value"));
doc.DocumentElement.AppendChild(add);
doc.save("new.xml");
Avatar billede nzc Nybegynder
11. marts 2004 - 11:58 #3
du kan så vidt jeg ved ikke appende en node (sidder selv i XML helvede :P ) Du skal importe den i stedet

doc.DocumentElement.AppendChild(doc.ImportNode(add, true));
Avatar billede arne_v Ekspert
11. marts 2004 - 12:02 #4
Jeg har brugt XmlNode AppendChild XmLNode før hvor det har virker
Avatar billede pfp Nybegynder
11. marts 2004 - 12:13 #5
Det arne_v har postet virker fint nok. Jeg har ændret det så den loader og saver i samme fil.

Men jeg kan ikke rigtig gennemskue hvordan jeg får det ind i en hovednode for sig selv:
XmlDocument doc = new XmlDocument();
doc.Load("projects.xml");
XmlNode add = doc.CreateElement("name");
add.AppendChild(doc.CreateTextNode(textBox1.Text));
doc.DocumentElement.AppendChild(add);
doc.Save("projects.xml");

Hvis jeg taster 'Peter' i textBox1 giver det en xml fil der ser sådan ud:
<?xml version="1.0" standalone="no"?>
<rod>
  <name>Peter</name>
</rod>

Det jeg gerne ville have var:
<?xml version="1.0" standalone="no"?>
<rod>
  <person>
    <name>Peter</name>
  </person>
</rod>

Så spm. er hvordan jeg får start og slut element udenom..
Avatar billede arne_v Ekspert
11. marts 2004 - 12:19 #6
Så skal du finde den XmlNode der repræsenterer person tagget og
kalde AppendChild på den i.s.f. på DocumentElement som repræsenterer
rod tagget.
Avatar billede arne_v Ekspert
11. marts 2004 - 12:27 #7
Nå - person eksisterer ikke. Så skal det også bare oprettes.
Avatar billede arne_v Ekspert
11. marts 2004 - 12:29 #8
Det må i så fald være noget a la:

XmlDocument doc = new XmlDocument();
doc.Load("projects.xml");
XmlNode addname = doc.CreateElement("name");
addname.AppendChild(doc.CreateTextNode(textBox1.Text));
XmlNode addperson = doc.CreateElement("person");
addperson.AppendChild(addname);
doc.DocumentElement.AppendChild(addperson);
doc.Save("projects.xml");
Avatar billede pfp Nybegynder
11. marts 2004 - 15:43 #9
Tak Arne. Det var præcist sådan det gerne skulle være...nu tror jeg også jeg er ved at kunne se logikken i det. Tak.
Avatar billede arne_v Ekspert
11. marts 2004 - 17:33 #10
nzc>

ImportNode skal bruges når noden kommer fra et andet XmlDocument, men her er noden
oprettet i det vi appender til.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester