如何避免XML解析器转到嵌套标记,或者只允许在Objective C中使用外部标记?

时间:2012-08-17 04:39:43

标签: objective-c xml-parsing nsxmlparser

这是一个简单的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>标记内,我该如何解决?感谢。

1 个答案:

答案 0 :(得分:1)

我认为您不能让NSXMLParser跳过嵌套元素,但您可以通过在level中递增实例变量parser:didStartElement:...并在其中递减来跟踪当前级别parser:didEndElement:...