Here is a simple XML:
<MSG>
<ID>123<ID>
<Node>
<ID>456<ID>
</Node>
</MSG>
And I got a parser which is subclass of ParentParser and implements NSXMLParserDelegate
The ParentParser is something like this:
- (id)initWithXmlString:(NSString *)xmlString
{
if ( (self = [super init]) ) {
NSString *str = [[NSString alloc] initWithString:xmlString];
self.xml = str;
[str release];
self.storingData = NO;
self.receiveString = [NSMutableString string];
self.elementsToParse = [NSArray array];
}
return self;
}
And this is how I parse the XML:
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if (self.m_oMyObject) {
if (self.storingData) {
NSString *tempStr = [self.receiveString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[self.receiveString setString:@""];
if ([elementName isEqualToString:kID]) {
//Go in twice
}
//============ Code skips ===================
As you can see, the kID, String ID had been parse twice. But I would like to have the 123 only, not the 456, which is inside the <Node> tag, how can I fix it? Thanks.
I don’t think that you can make
NSXMLParserskip nested elements, but you could keep track of the current level by incrementing an instance variablelevelinparser:didStartElement:...and decrementing it inparser:didEndElement:....