Objective c 如何使用Objective C解析此XML文件?

Objective c 如何使用Objective C解析此XML文件?,objective-c,ios,xml,ios4,Objective C,Ios,Xml,Ios4,我有一个结构如下的XML文件: <xmlDocument version="1"> <subject id="1"> <maths marks="65"/> <science marks="80"/> <tamil marks="90"/> <social marks="79"/> <English marks="70"/> </subject> </xmlDocument> 如何使

我有一个结构如下的XML文件:

<xmlDocument version="1">
<subject id="1">
<maths marks="65"/>
<science marks="80"/>
<tamil marks="90"/>
<social marks="79"/>
<English marks="70"/>
</subject>
</xmlDocument>

如何使用Objective C解析和获取这些数据

  • 创建
    NSXMLParser
    的实例,并为解析器分配一个委托
  • 在委托类中,实现
    NSXMLParserDelegate
    协议的相关方法
  • 调用解析器的
    parse
    方法
  • 如果遇到问题,请提出更具体的问题
  • 创建
    NSXMLParser
    的实例,并为解析器分配一个委托
  • 在委托类中,实现
    NSXMLParserDelegate
    协议的相关方法
  • 调用解析器的
    parse
    方法
  • 如果遇到问题,请提出更具体的问题

  • 由于标记中没有任何文本,因此可以对代理使用
    解析器:(NSXMLParser*)解析器didStartElement:(NSString*)elementName属性:(NSDictionary*)attributeDict
    方法。然后可以将值存储在字典或对象中。如果您有多个
    subject
    标记,则可以使用
    parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName
    更改解析器的上下文。官方文件应提供更多关于可用方法的详细信息

    您可以这样做(不完整的实现):


    由于标记中没有任何文本,因此可以对代理使用
    解析器:(NSXMLParser*)解析器didStartElement:(NSString*)elementName属性:(NSDictionary*)attributeDict
    方法。然后可以将值存储在字典或对象中。如果您有多个
    subject
    标记,则可以使用
    parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName
    更改解析器的上下文。官方文件应提供更多关于可用方法的详细信息

    您可以这样做(不完整的实现):

    /*
     * Incomplete implementation just to give some pointers
     */
    @implementation MyDelegate
        -(void) init {
            if((self = [super init])) {
                _subjects = [NSMutableArray new];
            }
        }
        -(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName attributes:(NSDictionary *)attributeDict {
            if([elementName equalsIgnoreCase:@"subject"]) {
                _context = [NSMutableDictionary new];
            } else {
                [_context setObject:[attributeDict valueForKey:@"mark"] forKey:elementName];
            }
        }
        - (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName {
            [_subjects addObject:_context]
            [_context release]; _context = nil;
        }
    @end