Avatar billede madox_madox Nybegynder
27. april 2006 - 13:36 Der er 12 kommentarer og
1 løsning

Skrive XML fil. Hvordan?

Jeg skal til at lave en XML fil udfra en datastruktur/objektmodel som jeg har lavet. Denne objektmodel løber jeg så igennem og vil skrive de nødvendige data til en XML fil så jeg senere kan indlæse og genskabe objektmodellen.
Men jeg er lidt forvirret angående skrivning af XML filer.
Jeg kan se at der er noget der hedder XmlTextWriter og XmlDocument.
Kan jeg nøjes med at bruge XmlDocument til at skrive og modificere i min XML fil, eller skal jeg bruge XmlTextWriter til at skrive min XML fil med, og hvis jeg så senere vil søge/slette/indsætte mm. i XML-filen så skal XmlDocument benyttes?
Jeg er lidt i tvivl om hvorvidt funktionaliteten i de to klasser overlapper hinanden, eller om man er nødt til at bruge begge.
Avatar billede arne_v Ekspert
27. april 2006 - 13:52 #1
hvis du er rigtigt doven så udskriver du med XML serializeren
Avatar billede arne_v Ekspert
27. april 2006 - 13:53 #2
XmlDocument til både Load og Save er en mulighed

XmlTextWriter og XmlTextReader er enmulighed
Avatar billede arne_v Ekspert
27. april 2006 - 13:54 #3
Lidt afhængig af hvordan du vil have din kode, så tror at du enten skal gå efter
den nemme løsning (XML serializer/deserialzier) eller en masse kode med
XmlTextWriter og XmlTextReader

XmlDocument tror jeg ikke matcher godt med din objekt model
Avatar billede madox_madox Nybegynder
27. april 2006 - 14:13 #4
Det er en objektmodel som bliver gennemløbet og som der bliver skrevet nogle oplysninger ned fra som skal bruges når jeg vil indlæse objektet igen og som en export funktion til et CAD program som skal kunne indlæse XML filen.

Men hvordan virker XML serializer/deserialzier ?
Avatar billede arne_v Ekspert
27. april 2006 - 14:20 #5
den ordner det hele automatisk du beder den bare udskrive et objekt og så gør
den det

men men men så vælger den jo selv formatet d.v.s. at den skal læses ind med deserializer
Avatar billede madox_madox Nybegynder
27. april 2006 - 14:58 #6
Det er nok et lille problem hvis den selv kan bestemme strukturen. Der skal nemlig også gemmes andre objekter i filen hvor noget af data er delt mellem to objekter. Så jeg bliver nok nødt til at lave det "manuelt".

Jeg får hele tiden en fejl med XmlDocument. Hvordan laver man et tomt XML document og tilføjer data til denne?
Jeg har forsøgt med:
        Dim doc As New XmlDocument()
        Dim xEl As XmlElement = doc.CreateElement("HejMedDig")
        xmlEl.AppendChild(xEl)
Avatar billede arne_v Ekspert
27. april 2006 - 15:29 #7
doc.AppendChild(xEl)

formoder jeg

har du laest http://www.eksperten.dk/artikler/499 ?
Avatar billede madox_madox Nybegynder
28. april 2006 - 08:49 #8
Ja nu har jeg :-)

Har du ikke en god idé til hvordan man kan reducere størrelsen på en XML fil. Jeg kommer hurtigt op på 10000-15000 linier, hvilket medfører meget store filer. Jeg kan se hvis jeg manuelt pakker filen med zip bagefter så reduceres størrelsen drastisk. Men er der ikke en smartere måde at reducere størrelsen på.
Filen skal aldrig åbnes manuelt og kunne læses, men virker som sagt kun som en exportfunktion til et andet program og som en måde hvorpå et projekt i mit program kan gemmes på.
Avatar billede arne_v Ekspert
28. april 2006 - 12:50 #9
hvis formatet ligger fast tror jeg at det eneste du kan er at undlade
indenterings whitespace

du kan evt. zippe on the fly som du skriver filen
Avatar billede madox_madox Nybegynder
29. april 2006 - 09:07 #10
Hvordan kan man zippe on the fly?
Avatar billede arne_v Ekspert
29. april 2006 - 15:29 #11
til inspiration:

using System;
using System.IO;
using System.Text;
using System.Xml;
using ICSharpCode.SharpZipLib.Zip;

class MainClass
{
    public static void Main(string[] args)
    {
        XmlDocument doc = new XmlDocument();
        XmlNode root = doc.CreateElement("all");
        doc.AppendChild(root);
        for(int i = 0; i < 5; i++)
        {
            XmlNode elm = doc.CreateElement("one");
            elm.AppendChild(doc.CreateTextNode("Element #" + (i + 1)));
            root.AppendChild(elm);
        }
        ZipOutputStream zos = new ZipOutputStream(new FileStream(@"C:\Test.zip", FileMode.Create));
        ZipEntry ze = new ZipEntry("Test.xml");
        zos.PutNextEntry(ze);
        doc.Save(zos);
        zos.Finish();
        zos.Close();

    }
}
Avatar billede arne_v Ekspert
19. juni 2006 - 01:21 #12
OK ?
Avatar billede madox_madox Nybegynder
08. juli 2006 - 13:03 #13
Ja undskyld min lange svar tid. Jeg fik det til at virke.
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
Kurser inden for grundlæggende programmering

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