Avatar billede cold_raider Nybegynder
28. august 2007 - 13:53 Der er 10 kommentarer og
1 løsning

Skrive til XML.

Hej eksperter!

Jeg har en xml fil som ser sådan ud:

<?xml version="1.0" standalone="yes"?>
<playlist>
  <trackList>
    <track>
      <title>Noget</title>
      <creator>Noget Andet</creator>
      <location>FinSang.mp3</location>
    </track>
  </trackList>

</playlist>

Når jeg så skal skrive til den, bruger jeg denne kode:

        Dim doc As XmlDocument = New XmlDocument
        doc.Load(My.Request.PhysicalApplicationPath & "/playlist.xml")

        Dim title As XmlNode = doc.CreateElement("title")
        title.AppendChild(doc.CreateTextNode("Flot Sang"))
        Dim creator As XmlNode = doc.CreateElement("creator")
        creator.AppendChild(doc.CreateTextNode("Godt Band"))
        Dim location As XmlNode = doc.CreateElement("location")
        location.AppendChild(doc.CreateTextNode("FlotSang.mp3"))
        Dim track As XmlNode = doc.CreateElement("track")
        track.AppendChild(title)
        track.AppendChild(creator)
        track.AppendChild(location)
        doc.DocumentElement.AppendChild(track)

        doc.Save(My.Request.PhysicalApplicationPath & "/playlist.xml")


Problemet er så, at den skriver det, men den skriver det ikke ind i mellem <tracklist> </tracklist> men kun i mellem <playlist> </playlist>

Hvordan får jeg den til at skrive det ind i mellem <tracklist> </tracklist>??

På forhånd tak.
Stefan
Avatar billede erikjacobsen Ekspert
28. august 2007 - 13:56 #1
Du skal vel sige at den skal indsættes der. Kan ske det hedder:

doc.DocumentElement.FirstChild.AppendChild(track)

? Ellers skal du jo direkte be' om trackList knuden
Avatar billede kalp Novice
28. august 2007 - 16:13 #2
doc.SelectSingleNode("playlist/trackList").AppendChild(track)
hvis den ikke fanger noden så gør en af disse i hvertfald.
doc.SelectSingleNode("/playlist/trackList").AppendChild(track)
og helt sikkert
doc.SelectSingleNode("//playlist/trackList").AppendChild(track)

men du skal helst bruge en af de andre to:)
Avatar billede cold_raider Nybegynder
28. august 2007 - 20:13 #3
jeg kan ikke få nogle af eksemplerne til at virke, nok fordi jeg gør det forkert. Hvor skal jeg sætte det hen i koden?
Avatar billede windcape Praktikant
28. august 2007 - 20:20 #4
kalp

playlist er da root node, så den skal da ikke med ? :-) dvs. hvis det er klassisk DOM stil:

track = doc.ChildNodes[0].AppendChild(doc.CreateElement("track"));
Avatar billede cold_raider Nybegynder
28. august 2007 - 20:24 #5
track = doc.ChildNodes[0].AppendChild(doc.CreateElement("track"));

doc.ChildNodes[0] giver en fejl der siger at det ikke kan konvertes til XmlNode når det er en XmlNodeList
Avatar billede erikjacobsen Ekspert
28. august 2007 - 20:34 #6
Jeg vil da mene at mit forslag giver

<?xml version="1.0" standalone="yes"?>
<playlist>
<trackList>
<track><title>Noget</title><creator>Noget Andet</creator><location>FinSang.mp3</location></track>
<track><title>Flot Sang</title><creator>Godt Band</creator><location>FlotSang.mp3</location></track>
</trackList>
</playlist>

Eneste ændring i linien:
    doc.DocumentElement.FirstChild.AppendChild(track)
Avatar billede cold_raider Nybegynder
28. august 2007 - 20:44 #7
sådan så virker det, skulle bare lige åbne øjnene lidt. erikjacobsens eksempel virkede perfekt. Takker læg et svar så får du point. I andre skal selvfølgelig også have tak.
Avatar billede erikjacobsen Ekspert
28. august 2007 - 20:54 #8
Jeg samler slet ikke på point, tak.
Avatar billede kalp Novice
28. august 2007 - 21:17 #9
windcape >> med xpath så skal root angives:)
Avatar billede erikjacobsen Ekspert
28. august 2007 - 21:37 #10
Jeg vil også mene at alle 3 forslag fra kalp vil give det rigtige resultat.
Avatar billede cold_raider Nybegynder
13. maj 2008 - 10:35 #11
lukker
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

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