Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[XML,C#.NET]Parser leest over element heen?!

Pagina: 1
Acties:

  • Razr
  • Registratie: September 2005
  • Niet online
Ik zit nu al een dag op dit probleem, en besluit nu maar om het even hier te posten. Ik gebruik onderstaande code om een XML bestand uit te lezen:

C#:
1
2
3
4
5
while (rdr.Depth == 3)
{
   System.Windows.Forms.MessageBox.Show(rdr.Name);
   rdr.Read();
}

Deze while gaat dus door een serie onderliggende elementen heen. Vervolgens krijg ik ook netjes een popup bij elk element behalve bij één. Deze wordt op de een of andere manier gewoon overgeslagen 8)7

Hier onder een voorbeeld van het XML bestand:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8" ?>
<Productenlijst>
   <Producten winkelnummer="">
         <Product>
            <PluNummer></PluNummer>
            <Nummer></Nummer>
            <Hoofdgroep></Hoofdgroep>
            <Subgroep></Subgroep>
            <Omschrijving></Omschrijving>
            <Netto></Netto>
            <Bruto></Bruto>
            <Btw></Btw>
            <Inhoud></Inhoud>
            <Toelichting></Toelichting>
            <Kleur></Kleur>
            <Optie></Optie>
            <Actie></Actie>
            <Toevoeging></Toevoeging>
            <Actief></Actief>
         </Product>
    </Producten>
</Productenlijst>


Het element Hoofdgroep wordt hier overgeslagen, de rest werkt allemaal perfect. Iemand enig idee waarom deze wordt overgeslagen door de reader?

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:05
Ben je zeker dat je XML dan wel goed is ?

Als je je while eens verandered, en checkt of je reader EOF is, en gewoon alles leest, dan zou het toch wel moeten goed gaan; dan zou hij alles moeten tonen.
(Zowiezo vind ik het een vreemde constructie om op 'Depth' te gaan checken bij het uitlezen; als je alle nodes wilt die onder product liggen, dan kan je imho beter XPath gaan gebruiken, en gewoon die nodes retrieven waarin je geinteresseert bent.

https://fgheysels.github.io/


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Ligt aan die MessageBox denk ik.
Vervang die MessageBox.Show regel eens door
C#:
1
2
3
4
5
6
7
8
while (rdr.Depth == 3) 
{ 
  if ( System.Windows.Forms.DialogResult.OK  ==
   System.Windows.Forms.MessageBox.Show(rdr.Name)  )
  {
     rdr.Read(); 
  }
}


Kijk anders ff of het aan die massagebox ligt door het te vervangen door dit:
C#:
1
System.Diagnostics.Debug.WriteLine(rdr.Name);


En kijk of hij nu wel alles toont in de Debugger output.

[ Voor 58% gewijzigd door Mastermind op 02-08-2007 14:31 ]


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 28-11 11:15

sopsop

[v] [;,,;] [v]

>:)

[ Voor 3% gewijzigd door sopsop op 02-08-2007 13:24 ]


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Wel toevallig dat het hoofdgroep-element ook het 3e element in de lijst is...

Haal anders eens het hoofdgroep-element weg uit je xml-bestand, en kijk of hij dan weer het 3e element (nu dus subgroep) overslaat.
  • Zo ja, dan zit het probleem in de logica van het uitlezen (al zie ik hier eigenlijk niets vreemds).
  • Zo nee, dan zit het probleem in het hoofdgroep-element zelf, misschien ergens een 'o' in de open-tag en een '0' in de sluittag o.i.d.