Avatar billede dasch87 Nybegynder
15. marts 2009 - 18:57 Der er 4 kommentarer og
1 løsning

Tilføj elementer til XML fil med LINQ (i C#)

Hej Eksperter

Jeg er ved at lave en metode til at tilføje elementer til en XML fil vha. LINQ to XML. Min XML fil ser ud som følgende:
<dvdlibrary>
  <dvd>
    <title>Blå Mænd</title>
    <language>Danish</language>
    <genre>Comedy</genre>
    <year>2009</year>
    <playingTime>85</playingTime>
    <director>Rasmus Heide</director>
    <plot>Sjov på en losseplads</plot>
    <actors>
      <actor>
        <firstname>Martin</firstname>
        <lastname>Brygman</lastname>
        <role>En mand</role>
      </actor>
      <actor>
        <firstname>Mick</firstname>
        <lastname>Øgendahl</lastname>
        <role>En sjov mand</role>
      </actor>
      <actor>
        <firstname>Thure</firstname>
        <lastname>Lindhardt</lastname>
        <role>En lyshåret mand</role>
      </actor>
    </actors>
  </dvd>
</dvdlibrary>

Mit problem er at tilføje flere "actor"s til XML'en. Indtil videre ser min metode således ud:

public void addToXml(String title, String language, String genre, int year, int playingTime, String director, String plot, List<Actor> actors)
        {
            dvdxml.Element("dvdlibrary").Add(
                new XElement("dvd",
                    new XElement("title", title),
                    new XElement("language", language),
                    new XElement("genre", genre),
                    new XElement("year", year),
                    new XElement("playingTime", playingTime),
                    new XElement("director", director),
                    new XElement("plot", plot),
                        new XElement("actors", "HER ER MIT PROBLEM")));

            dvdxml.Save(XMLExample.xml");
        }

Hvordan kan jeg iterere igennem listen af actors og tilføje dem rigtigt?
Jeg tænker noget i stil med:
foreach(Actor a in actors)
            {
                new XElement("actor",
                    new XElement("firstname", actors.ElementAt(0).firstname),
                    new XElement("lastname", actors.ElementAt(0).lastname),
                    new XElement("role", actors.ElementAt(0).role)));
            }

Men det kan jeg ikke tilføje inde i new XElement("actors", bla bla).

Please hjælp.

/Dasch
Avatar billede arne_v Ekspert
15. marts 2009 - 19:16 #1
Lav en mellem regning.

XElement nydvd = new XElement(...);
foreach(...)
{
  nydvd.Add(...);
}
dvdxml.Element(...).Add(nydvd);
Avatar billede dasch87 Nybegynder
16. marts 2009 - 20:23 #2
Kan jeg lokke dig til at præcisere det lidt mere arne_v? Jeg tror ikke jeg er helt med på hvordan det skal foregå?
På forhånd tak.
Avatar billede arne_v Ekspert
16. marts 2009 - 20:39 #3
utestet:

public void addToXml(String title, String language, String genre, int year, int playingTime, String director, String plot, List<Actor> actors)
        {
            XElement nydvd =  new XElement("dvd",
                    new XElement("title", title),
                    new XElement("language", language),
                    new XElement("genre", genre),
                    new XElement("year", year),
                    new XElement("playingTime", playingTime),
                    new XElement("director", director),
                    new XElement("plot", plot));
            foreach(Actor a in actors)
            {
                nydvd.Add(new XElement("actor",
                    new XElement("firstname", actors.ElementAt(0).firstname),
                    new XElement("lastname", actors.ElementAt(0).lastname),
                    new XElement("role", actors.ElementAt(0).role)));
            }
            dvdxml.Element("dvdlibrary").Add(nydvd);
            dvdxml.Save("XMLExample.xml");
        }
Avatar billede dasch87 Nybegynder
17. marts 2009 - 13:47 #4
Nice.., det virkede. Har bare en lille rettelse da "actor" elementerne skal være inde i "actors". Så koden bliver som følger:
XElement nydvd = new XElement("dvd",
                    new XElement("title", title),
                    new XElement("language", language),
                    new XElement("genre", genre),
                    new XElement("year", year),
                    new XElement("playingTime", playingTime),
                    new XElement("director", director),
                    new XElement("plot", plot),
                    new XElement("actors", ""));
            foreach (Actor a in actors)
            {
                nydvd.Element("actors").Add(new XElement("actor",
                    new XElement("firstname", actors.ElementAt(0).firstname),
                    new XElement("lastname", actors.ElementAt(0).lastname),
                    new XElement("role", actors.ElementAt(0).role)));
            }

Tusind tak for din hjælp arne_v. Smid et svar og du får dine vejfortjente point:)
Avatar billede arne_v Ekspert
17. marts 2009 - 14:05 #5
svar
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