Avatar billede pfp Nybegynder
08. marts 2004 - 21:49 Der er 14 kommentarer og
1 løsning

Enumeration igennem xml dokument

Hej,

Jeg har et XML-dokument med følgende struktur:
<tv>
  <channel id="001.tv.tv2.dk">
    <display-name>TV 2</display-name>
  </channel>

  <channel id="002.tv.tv2.dk">
    <display-name>DR1</display-name>
  </channel>

  <channel id="003.tv.tv2.dk">
    <display-name>TV3</display-name>
  </channel>
</tv>

Jeg troede så jeg kunne gøre sådan her:
IEnumerator ie = myDocument.DocumentElement.GetElementsByTagName("channels").GetEnumerator();
while (ie.MoveNext())
{
    String n = (String) ie.Current;
    treeView1.Nodes.Add(n);
}

Det compiler fint og smider ingen exception, men den tilføjer bare ikke channels til min treeView. Men jeg skal jo nok også have specificeret at den skal have fat i display-name.

Er der en der kan vise hvordan jeg får <display-name> ud i mit treeView?

/pfp
Avatar billede arne_v Ekspert
08. marts 2004 - 21:50 #1
Prøv at erstatte "channels" med "channel"
Avatar billede arne_v Ekspert
08. marts 2004 - 21:52 #2
Og jeg mener altså at ie.Current er en XmlNode ikke en String d.v.s. at du skal
kalde noget for at hente hvad du nu skal bruge ud.
Avatar billede pfp Nybegynder
08. marts 2004 - 21:54 #3
Den siger specified cast invalid.

Hvad mener du med at jeg skal kalde noget?
Avatar billede arne_v Ekspert
08. marts 2004 - 21:58 #4
Det må skulle være:

XmlNode n = (XmlNode) ie.Current;

og så kalder du de rette properties/metoder på n for at fiske enten id eller
display name.
Avatar billede pfp Nybegynder
08. marts 2004 - 21:59 #5
Jeg mente mere hvilken metode der "fisker" displayname frem...
Avatar billede pfp Nybegynder
08. marts 2004 - 22:00 #6
Så fik jeg den. Skulle bruge n.InnerText;
Avatar billede arne_v Ekspert
08. marts 2004 - 22:01 #7
OK - jeg tror også at du kunne have fundet den med noget first child.
Avatar billede pfp Nybegynder
08. marts 2004 - 22:13 #8
Okay. Jeg vil gerne have på plads hvordan jeg får fat på et element og dens børn.

Udover den XML struktur jeg præsenterede før indeholder dokumentet også denne struktur:
<programme start="20040308193000 +0100" stop="20040308200000 +0100" channel="001.tv.tv2.dk">
    <title lang="da">Regionalprogram</title>
    <video>
      <present>yes</present>
      <colour>yes</colour>
      <aspect>4:3</aspect>
    </video>
  </programme>

Jeg ville meget gerne om du kan forklare lidt om princippet, hvordan jeg får fat i de elementer der er nested inden i andre elementer.

Mvh peter
Avatar billede arne_v Ekspert
08. marts 2004 - 22:22 #9
Det må være noget a la:

                XmlNodeList elements = doc.GetElementsByTagName("video");
                foreach(XmlNode element in elements)
                {
                        XmlNodeList subelements = element.ChildNodes;
                        foreach(XmlNode subelement in subelements)
                        {
                                Console.WriteLine(subelement.Name + " = " + subelement.FirstChild.Value);
                        }
                }
Avatar billede pfp Nybegynder
08. marts 2004 - 22:28 #10
Jeg har forsøgt med:
XmlNodeList elements = myDocument.GetElementsByTagName("title");
foreach(XmlNode element in elements)
{
    XmlNodeList subelements = element.ChildNodes;
    foreach(XmlNode subelement in subelements)
    {
        textBox1.AppendText(subelement.FirstChild.Value);
    }
}

Men det giver:
System.NullReferenceException: Object reference not set to an instance of an object.
Avatar billede arne_v Ekspert
08. marts 2004 - 22:36 #11
Ja - fordi title elementet har ingen children !
Avatar billede pfp Nybegynder
08. marts 2004 - 22:52 #12
Ja okay selvf. Jeg ville gerne have fat i title. Det burde vel være FirstChild på programme? Jeg kan ikke rigtig greje det..
Avatar billede arne_v Ekspert
08. marts 2004 - 22:58 #13
XmlNodeList elements = doc.GetElementsByTagName("title");
                foreach(XmlNode element in elements)
                {
                        Console.WriteLine(element.Name + " = " + element.FirstChild.Value);
                }
Avatar billede arne_v Ekspert
08. marts 2004 - 22:59 #14
OK ?
Avatar billede pfp Nybegynder
08. marts 2004 - 23:06 #15
Jeg har ikke lige prøvet dit sidste, men jeg tror jeg har fået det til at passe helt nu med:
IEnumerator iter = myDocument.GetElementsByTagName("programme").GetEnumerator();
               
while(iter.MoveNext())
{
XmlNode p = (XmlNode) iter.Current;
XmlNode q = p.FirstChild;

String programnavn = q.FirstChild.Value;

if(programnavn == null)
{
    listBox1.Items.Add("empty");
}
else
{
    listBox1.Items.Add(programnavn);
}
}

Du skal have tusind tak fordi du gider hjælpe!
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