objective-c - 如何处理NSXMLParser中另一个标签内的标签

标签 objective-c ios nsxmlparser

我有一个文件:

<xml>
    <component>something
        <system>somethingDeeper
            <value>somethingDeepest</value>
        </system>
    </component>

    <component>somethinfDifferent
        <value>somethingDifferentDeeper</value>
    </component>

    <value>somethingNew</value>
</xml>

因此,我想区分另一个标记(例如<system>)内的内容是什么。如何使用 NSXMLParser 做到这一点?我目前使用的是BOOL ivar,但这有很多标签,而且不如我期望的那么优雅。我知道NSXMLParser是SAX解析器,并且我理解这一点。

在上面的示例中,我将使用以下命令三次输入didEndElement方法:elementName等于value是否有更优雅的方法来区分<component>标记中的条目是什么?

最佳答案

您可以保留当前位于其中的一系列标签名称

NSMutableArray *tagNameStack;

每次输入新元素时,都会将其添加到此数组中。每次离开时,都将其删除。即
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    [tagNameStack addObject:elementName];

    // Your code here
}


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    // Your code here

    [tagNameStack removeLastObject];
}

因此,当您解析somethingDeepest时,您的tagNameStack数组将是
@"xml", @"component", @"system", @"value"

您可以使用此堆栈来确定您在xml中的位置,即
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    if ([tagNameStack containsObject:@"system"]) {
        // Deal with the value inside the system tag
    } else if ([tagNameStack containsObject:@"component"]) {
        // Deal with the value inside the component tag
    } else {
        // This must be the value inside the XML tag
    }
}

关于objective-c - 如何处理NSXMLParser中另一个标签内的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11033502/

相关文章:

ios - 在ios中计算xml多个子标签

ios - NSURLSession 委托(delegate)方法未被调用

objective-c - Cocoa 中的 XML 模式绑定(bind)/对象模型框架

ios - iOS 上的 NSXMLParser,我如何在给定 xml 文件的情况下使用它

ipad - UIButton 在 iPad 屏幕底部附近没有响应

iphone - 为什么我的NSString无法读取我的.txt文件?

ios - 用按钮替换 UITabbar 项目 - Apple 接受/拒绝

ios - IOS Native 中的 Worklight Adapter 调用传递 JSON 参数

php - 如何从 Objective-C/iOS 中恢复 PHP $_SESSION 变量?

ios - CVPixelBuffer 到 NSData 并返回