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.