这是一个简单的XML:
<MSG>
<ID>123<ID>
<Node>
<ID>456<ID>
</Node>
</MSG>
我有一个解析器,它是ParentParser
的子类并实现NSXMLParserDelegate
ParentParser
是这样的:
- (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;
}
这就是我解析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 ===================
如您所见,kID
,字符串ID
已解析两次。但是我想只有123
而不是456
,它位于<Node>
标记内,我该如何解决?感谢。
答案 0 :(得分:1)
我认为您不能让NSXMLParser
跳过嵌套元素,但您可以通过在level
中递增实例变量parser:didStartElement:...
并在其中递减来跟踪当前级别parser:didEndElement:...
。