Click here to Skip to main content
Licence CPOL
First Posted 2 Jun 2009
Views 19,315
Bookmarked 10 times

Parsing XML on the iPhone

By | 2 Jun 2009 | Article
Since I am developing a game engine for the iPhone that I would like to re-use, I have chosen to host all game data in the form of XML files

Introduction

Since I am developing a game engine that I would like to re-use, I have chosen to host all game data in the form of XML files. There are various reasons for doing this, partly because I can make game editors (Map Editor, Item Editor, NPC Editor, etc.) and partly because I value using re-useable code.

In order to get it all working, I had to explore the NSXMLParser given by the iPhone SDK. With XNA and the .NET Framework, I got used to reading in XML in a very specific way, and the iPhone does it quite differently. Currently, my test map’s XML file looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<Map>
	<MapName>Test Map</MapName>
	<MapContentName>Map001</MapContentName>
	<MapDimensions>
		<MapWidth>5</MapWidth>
		<MapHeight>5</MapHeight>
	</MapDimensions>	

	<TileDimensions>
		<TileWidth>32</TileWidth>
		<TileHeight>32</TileHeight>
	</TileDimensions>	

	<SpriteSheetName></SpriteSheetName>
	<MapLayers>
		<BaseLayer>0, 1, 0, 0, 0, 0, 0, 0, 0</BaseLayer>
		<MiddleLayer>0, 1, 0, 0, 0, 0, 0, 0, 0</MiddleLayer>
		<TopLayer>0, 1, 0, 0, 0, 0, 0, 0, 0</TopLayer>
		<AtmosphereLayer>0, 1, 0, 0, 0, 0, 0, 0, 0</AtmosphereLayer>
		<CollisionLayer>0, 0, 0, 0, 0, 0, 0, 0, 0</CollisionLayer>
	</MapLayers>
</Map>

In order to read in the XML, there are 3 methods that you need to implement. Since your XML parser goes line by line, you will need to write a method that starts an element, ends an element, and reads a character. Such as:

// Start of element
- (void)parser:(NSXMLParser *)parser
			didStartElement:(NSString *)elementName
			namespaceURI:(NSString *)namespaceURI
			qualifiedName:(NSString *)qName
			attributes:(NSDictionary *)attributeDict
{
}

// Found Character
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSMutableString *)string
{
}

// End Element
- (void) parser:(NSXMLParser *)parser
			didEndElement:(NSString *)elementName
			namespaceURI:(NSString *)namespaceURI
			qualifiedName:(NSString *)qName
{
}

Once you have these methods set up, all you really need to do is populate them. For instance, in the “Start Element” method, if your “elementName” = “MapName” (in the above XML case) you would allocate the map classes NSString like so:

mapName = [NSMutableString string];

When you found a character, you would store those into a string, and when the end of the element is reached, you would put that string into whatever element it was reading. For example, the map name:

mapName = stringValueFromFoundCharacter;

Not too hard, but wasn’t easy to figure out either. At least I know it and now can implement readers for every data that I wish to store as XML!

Read the original blog post here.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Craig Giles



United States United States

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralPlease post the source code PinmemberMagela23:09 20 Sep '10  
GeneralMy vote of 4 Pinmemberbaba lorenz22:47 18 Jul '10  
GeneralMy vote of 1 PinmemberKarstenK21:56 13 Jun '10  
GeneralMy vote of 1 PinmemberStuGuru4:34 3 Jun '10  
GeneralTBXML V1.3 PinmemberThomas-Soft0:02 24 Feb '10  
Generalvtd-xml PinmemberJimmy Zhang19:14 9 Jun '09  
GeneralNSXML Parser is read-only PinmemberMixxerY21:13 2 Jun '09  
GeneralRe: NSXML Parser is read-only PinmemberThinkMud15:21 4 Jun '09  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web03 | 2.5.120517.1 | Last Updated 2 Jun 2009
Article Copyright 2009 by Craig Giles
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid