Gå til innhold

XML-behandling i VB.Net


Anbefalte innlegg

Jeg har følgende XML-fil:

<?xml version="1.0"?>
<Spel>
<Grupper>
 <Gruppe>
 	<Spelarar>Spelar 1 og Spelar 2</Spelarar>
 	<Kampar>
   <Kamp>Kamp1</Kamp>
   <Kamp>Kamp2</Kamp>
   <Kamp>Kamp3</Kamp>
 	</Kampar>
 </Gruppe>
 <Gruppe>
 	<Spelarar>Spelar 1 og Spelar 3</Spelarar>
 	<Kampar>
   <Kamp>Kamp1a</Kamp>
   <Kamp>Kamp2a</Kamp>
   <Kamp>Kamp3a</Kamp>
 	</Kampar>
 </Gruppe>
</Grupper>
</Spel>

 

Ved oppstart blir filen lastet inn slik:

LesSR = New System.IO.StreamReader("kampar.xml")
       XML = New System.Xml.XmlTextReader(LesSR)
       Kampar = New System.Xml.XmlDocument
       Kampar.Load(XML)

 

Så laster jeg inn alle <Spelarar>-taggene i en combobox,som da blir seende slik ut:

Spelar 1 og Spelar 2
Spelar 1 og Spelar 3

 

Følgende kode blir eksekvert ved SelectedIndexChanges på comboboxen,og skal legge alle <Kamp>-taggene under den nå valgte <Spelarar>-taggen. Altså hvis man velger "Spelar 1 og Spelar 2", skal det komme følgende i listboxen:

Kamp1
Kamp2
Kamp3

 

Og dette bruker jeg følgende kode til:

       Dim mKampar As System.Xml.XmlNodeList =        Kampar.SelectNodes("Spel/Grupper/Gruppe/Kampar/Kamp")

       ListBox1.Items.Clear()

       For i = 0 To mKampar.Count - 1
           ListBox1.Items.Add(mKampar.Item(i).InnerText)
       Next i

 

Problemet med den er at følgende kommer i listboxen:

Kamp1
Kamp2
Kamp3
Kamp1a
Kamp2a
Kamp3a

 

Dette er jo ganske naturlig, siden jeg ber om å få ALLE <Kamp>-taggene.

 

Så spørsmålet mitt er: Hvordan får jeg inn KUN de under den valgte <Spelarar>-taggen?

 

Takk,

Degeim

Endret av Degeim
Lenke til kommentar
Videoannonse
Annonse

Tror det skal fungere med følgende:

 

Dim mKampar As System.Xml.XmlNodeList = Kampar.SelectNodes
("Spel/Grupper/Gruppe/Kampar/Kamp[../../Spelarar='" + spillerCombo.Text + "']")

ListBox1.Items.Clear()
For i = 0 To mKampar.Count - 1
  ListBox1.Items.Add(mKampar.Item(i).InnerText)
Next i

Øyvind

Lenke til kommentar

Er det ikke enklere å hente ut alle grupper i en XmlNodeList? Så bruker du selectedindex som samsvarer med indexen i dropdownboksen og hvilken XmlNodeList du skal selecte fra?

 

Sitter ikke på min maskin, så jeg får ikke testet nå, men synes dere gjør det forferdelig tumlete. Man mister liksom fordelene med XML om man skal gjøre det så tumlete og manuelt..

Lenke til kommentar

Jeg orker ikke skrive så mye her nå :p Men jeg kan vise deg et eksempel fra det jeg har her (Dette er C#, men jeg regner med du klarer å lese det, og forstå prinsippet):

 

Følgende xml:

<result>
 <node>
   <data1>Data 1-1</data1>
   <data2>Data 1-2</data2>
 </node>
 <node>
   <data1>Data 2-1</data1>
   <data2>Data 2-2</data2>
 </node>
...
</result>

 

(henter xml fra en webadresse)

       XmlDocument xDoc = new XmlDocument();

       using (System.Net.WebClient wc = new System.Net.WebClient())
       {
           xDoc.LoadXml(wc.DownloadString(address));
       }
       Response.Write("Laster xml fra web...(" + address + ")<br>");

       XmlNodeList xList = xDoc.GetElementsByTagName("node");

       Response.Write("Antall noder i listen: " + xList.Count + "<br><br>");

       foreach (XmlNode xNode in xList)
       {
            //Her har du da tak i en og en <node>
        }

 

Første runde i foreach'en har du da alle under første <node>. Så da kan du igjen hente ut

 

xNode.SelectSingleNode("Data1"); // gir deg "Data 1-1"

 

Det jeg da mente med indexer var jo som følger: Hvis du tenker deg rett før foreachen min: (ikke testet, men her har du prinsippet)

 

XmlNode dataenjegskalha = xList[dropdown.SelectedIndex];
dataenjegskalha.SelectSingleNode("kamp1");
// osv...

 

Var det nesten litt forsåelig? Det er litt tidlig på dagen :p

 

Si ifra hvis det er noe mer du lurer på :)

Endret av Manfred
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...