XmlTextReader leeren Elementknoten überspringen



  • Hallo,

    ich durchforste mit dem xmltextreader eine xml Datei. Diese enthält an einer Position manchmal einen leeren Elementknoten.
    Ich poste mal eine vereinfachte Version als Beispiel:

    <?xml version="1.0"?>
    <Datenbank>
       <Kunde KundenNummer="0815">
           <Eintrag01 Anrede="Herr" />
           <Eintrag02 Vorname="Markus" />
           <Elemente>
             <Element Vorgang="1">
               <Eintrag01 Attr1="foo" />
               <Eintrag02 Attr2="bar" />
             </Element>
           </Elemente>
       </Kunde>
       <Kunde KundenNummer="0816">
           <Eintrag01 Anrede="Frau" />
           <Eintrag02 Vorname="Maria" />
           <Elemente />
    </Kunde>
    </Datenbank>
    

    Mein Code in vereinfachter Form:

    while(rdr->Read())
    {
    if(rdr->NodeType == XmlNodeType::Element)
    {		
    	rdr->ReadToFollowing("Kunde");
    
    if(rdr->Name == "Kunde")
    {
    	rdr->ReadToFollowing("Eintrag01");
    
    	if(rdr->Name == "Eintrag01")
             {
             //Lesen
             rdr->ReadToFollowing("Eintrag02");
    	}
             if(rdr->Name == "Eintrag02");
             {
             //Lesen
             rdr->ReadToFollowing("Elemente");
             }
    	if(rdr->IsEmptyElement)
    	{
             //Zum nächsten Kunden springen...
    	}
             if(rdr->Name == "Elemente")
             {
    	XmlReader^ rdrElemente = rdr->ReadSubtree();
    	while(rdrElemente->Read())
    	{//Die Elemente lesen...
    

    Wenn der Elemente Knoten nun leer ist, überspringt der Reader den nächsten Knoten einfach und lädt erst den übernächsten Knoten wieder.

    Ich denke die Lösung wäre mit isEmptyElement auf einen leeren Element Knoten zu reagieren und zum nächsten Kunden zuspringen. Aber ich weiss nicht wie.

    Habe ich mich verständlich ausgedrückt? Habe versucht den Code so kurz wie möglich zu halten.



  • Kann mir niemand helfen?



  • Dein Code ist nicht vollständig... Du hast einen Fehler drin, den man aber nicht sieht, da man nicht sieht wie Deine Schleife aufhört... Du überliest da was...

    AUch findet sich ja hier ein Beispiel.. so schwer kann das ja nicht sein, oder?
    http://msdn.microsoft.com/en-us/library/cc189056(VS.95).aspx


Anmelden zum Antworten