Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

1

10.09.2009, 16:48

TinyXml file parsen

Huhu,

habe ein paar kleine Probleme beim parsen einer File mit TinxXml. Und zwar geht es vorallem darum die richtigen Knoten zu bekommen.

Meine XML File sieht folgendermaßen aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<map name="foomap"  width="35" height="20">
        <layer name="Background" tileset="foo.png">
                <tile tilesetx="5" tilesety="4"  walkeble="false"/>
                <tile tilesetx="6" tilesety="12" walkeble="false"/>
                <tile tilesetx="0" tilesety="4"  walkeble="false"/>
        </layer>

        <layer name="Ground" tileset="foo2.png">
                <tile tilesetx="5" tilesety="4"  walkeble="true"/>
                <tile tilesetx="6" tilesety="12" walkeble="true"/>
                <tile tilesetx="0" tilesety="4"  walkeble="true"/>
        </layer>

     <layer name="Foreground" tileset="foo2.png">
                <tile tilesetx="5" tilesety="4"  walkeble="true"/>
                <tile tilesetx="6" tilesety="12" walkeble="true"/>
                <tile tilesetx="0" tilesety="4"  walkeble="true"/>
        </layer>
</map>


Als erstes hole ich mir den MapKnoten:

C-/C++-Quelltext

1
ticpp::Element *pRootNode = document.FirstChildElement( "map" );


funktioniert einwandfrei und er findet auch dessen Attribute. Jetzt fangen die Probleme an. Ich möchte nämlich als nächstes die Knoten von layer und tile.

C-/C++-Quelltext

1
2
pLayerNode = pRootNode->FirstChildElement( "layer" );
pChildNode = pLayerNode->FirstChildElement( "tile" );


Jedoch wirft er eine exception, nämlich:

Quellcode

1
Attribute does not exist
und zwar nur beim Tileknoten!

D.h Das Layer-Element bekommt er anscheinend. Jedoch später beim iterieren durch die Layer-Ebene:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
ticpp::Iterator< ticpp::Element > Layer,Tile;
        for( Layer = Layer.begin( pLayerNode  ); Layer != Layer.end(); Layer++ )
        {
            Layer->GetAttribute( "name", &stLayer );
            Layer->GetAttribute( "tileset", &stPfad ); 

            for(Tile = Tile.begin( pChildNode ); Tile != Tile.end(); Tile++)
            {
                //Stuff

            }
        }
    }

Wird in der äußeren Schleife wieder eine Exception geworfen, nämlich wieder:

Quellcode

1
Attribute does not exist

Diesma aber beim LayerElement, welches er doch anscheinend zuvor gefunden hatte?!

Kann mir jemand das ganze erklären. Ich meine mach ich irgendetwas falsch. Nunja muss ja wohl. Hoffe mir kann jemand helfen!

Grüße Toa

EDIT:

Problem gelöst! Wenn man bei ticpp pLayerNode->FirstChildElement(" layer ") benutzt, wird anscheinend der ChildKnoten von Layer geholt. Sehr sehr sinnfrei.

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

11.09.2009, 09:32

Zum Edit: Wieso sollte das sinnfrei sein, die Methode macht doch exakt was das, was der Name verspricht?

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

3

11.09.2009, 15:44

Ähm, nunja wenn man die TinyXml Methode mit dem gleichen Namen nutzt, bekommt man den Layer dessen Namen man übergibt. Bei ticpp aber anscheiend das Child davon^^

Naja hinterher ist man immer schlauer ^_^


gretz Toa

Werbeanzeige