Avatar billede jriff Nybegynder
09. august 2006 - 13:32 Der er 9 kommentarer

Læsning af XML

Hej Alle!

Jeg prøver at læse noget XML med .NET 2.0 for første gang, og det er sgu lidt svært :-) Jeg har lavet noget der virker, men jeg synes det er grim kode, og jeg har svært ved at tro at det er den "rigtige" måde at gøre det på. Kan nogen lige kigge lidt på det og komme med et par tips?

Jeg begynder bedre og bedre at kunne forstå Peter Sestoft der siger at XML er kendetegnet ved at det hverken er nemt at læse for maskiner eller mennesker.


XML:

<?xml version="1.0" encoding="utf-8" ?>
<content>
  <Enhed ID="8273">
    <Boligdata>
      <Reservation value="2">reserveret</Reservation>
      <Adresse value="adresse">Test 23A</Adresse>
    </Boligdata>
    <Finansiering>
      <Kontantpris value="kontantpris">5.595.000</Kontantpris>
      <Udbetaling value="udbetaling">400.000</Udbetaling>
    </Finansiering>
  </Enhed>
  <Enhed ID="8274">
    <Boligdata>
      <Reservation value="1">ikke reserveret</Reservation>
      <Adresse value="adresse">Test2 23A</Adresse>
    </Boligdata>
    <Finansiering>
      <Kontantpris value="kontantpris">15.545.000</Kontantpris>
      <Udbetaling value="udbetaling">1345.000</Udbetaling>
    </Finansiering>
  </Enhed>
  <Enhed  ID="8273">
    <Boligdata>
      <Reservation value="2">reserveret</Reservation>
      <Adresse value="adresse">Test3 23A</Adresse>
    </Boligdata>
    <Finansiering>
      <Kontantpris value="kontantpris">115.545.000</Kontantpris>
      <Udbetaling value="udbetaling">11345.000</Udbetaling>
    </Finansiering>
  </Enhed>
</content>
Avatar billede jriff Nybegynder
09. august 2006 - 13:36 #1
C#:

private void ReadXML()
    {
        DataSet ds = new DataSet();
        ds.Tables.Add("Enheder");
        ds.Tables["Enheder"].Columns.Add("ID");
        ds.Tables["Enheder"].Columns.Add("Reservation");
        ds.Tables["Enheder"].Columns.Add("Adresse");
        ds.Tables["Enheder"].Columns.Add("Kontantpris");
        ds.Tables["Enheder"].Columns.Add("Udbetaling");
       
        XmlReader xr=XmlReader.Create(Server.MapPath("Lejligheder.xml"));

        while (xr.ReadToFollowing("Enhed"))
        {
            DataRow r = ds.Tables["Enheder"].NewRow(); 
 
            xr.MoveToAttribute("ID");
            r["ID"] = xr.Value;
            xr.MoveToElement();
           
            xr.ReadToDescendant("Boligdata");
            xr.ReadToDescendant("Reservation");
            xr.MoveToAttribute("value");
            r["Reservation"] = xr.Value;
            xr.MoveToElement();
           
            xr.ReadToNextSibling("Adresse");
            r["Adresse"] = xr.ReadString();

            xr.ReadToFollowing("Finansiering");
            xr.ReadToDescendant("Kontantpris");
            r["Kontantpris"] = xr.ReadString(); xr.ReadToNextSibling("Udbetaling");
            r["Udbetaling"] = xr.ReadString();
                     
            ds.Tables["Enheder"].Rows.Add(r);
        }
Avatar billede jriff Nybegynder
09. august 2006 - 13:36 #2
} :-)
Avatar billede arne_v Ekspert
09. august 2006 - 14:14 #3
tja

der findes nemmere måder at lsæe XML ind i et XmLDocument (og også i DataSet mener jeg)
Avatar billede jriff Nybegynder
09. august 2006 - 15:00 #4
Ja - hvis man gør det i et DataSet går det helt i ged hvis der er attributes på elementerne, så den går desværre ikke. XmlDocument kender jeg ikke - det vil jeg lige kigge på.

Men er den kode jeg har skrevet god nok ud fra hvordan ReadTo skal bruges?
Avatar billede arne_v Ekspert
09. august 2006 - 15:34 #5
XmlDocument doc = new XmlDocument();
doc.Load(filnavn);

og XmlDocument kan laese enhver valid XML fil !
Avatar billede arne_v Ekspert
11. september 2006 - 23:26 #6
jriff ?
Avatar billede jriff Nybegynder
09. november 2006 - 09:35 #7
Hump lige et svar - det var lige som det skulle være, Arne!
Avatar billede arne_v Ekspert
09. november 2006 - 13:53 #8
ok
Avatar billede arne_v Ekspert
17. juni 2007 - 05:40 #9
så mangler du bare at acceptere
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