XML解析的几种方法

Posted 翌日晨曦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML解析的几种方法相关的知识,希望对你有一定的参考价值。

第一种方法系统自带的解析方法(NSXMLParser)

    //1、指定XML文件

    NSString *path=[[NSBundle mainBundle] pathForResource:@"person" ofType:@"xml"];

    //转换成data类型对象

    NSData *data=[NSData dataWithContentsOfFile:path];

    

    //2、为parser指定初始值

    NSXMLParser *parser=[[NSXMLParser alloc] initWithData:data];

    

    //指定代理

    parser.delegate=self;

    

    //3、实现文件解析

    BOOL bol=[parser parse];

    

    //返回解析的结果

    NSLog(@"%d",bol);

    

}

 

//开始解析xml文档

- (void)parserDidStartDocument:(NSXMLParser *)parser

{

    //初始化集合

    self.arryM=[NSMutableArray array];

    NSLog(@"开始解析文档StartDocument");

}

 

//xml文档解析结束,输出集合的内容

- (void)parserDidEndDocument:(NSXMLParser *)parser

{

    NSLog(@"结束解析文档DidEndDocument");

    NSLog(@"%@",self.arryM);

}

 

//文档元素解析开始,attributeDict表示属性的字典

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict

{

    //找到文档中user的元素,初始化字典 dictM

    if ([elementName isEqualToString:@"User"])

    {

        //文档开始 初始化字典

        self.dictM=[NSMutableDictionary dictionary];

        //向字典中添加属性元素

        [self.dictM setDictionary:attributeDict];

    }

    NSLog(@"<%@>",elementName);

}

 

//结束解析文档元素

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName

{

    //判断元素的关键字,只有符合name或者age的时候才向字典中添加元素

    if ([elementName isEqualToString:@"name"]||[elementName isEqualToString:@"age"])

    {

        //这时候dictM中已经有三对键值对啦

        [self.dictM setObject:self.strM forKey:elementName];

    }

    //直到找到User元素标签时,才向arrM中添加字典

    else if ([elementName isEqualToString:@"User"])

    {

        [self.arryM addObject:self.dictM];

    }

    NSLog(@"</%@>",elementName);

}

 

//解析文件元素的内容

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

    //将局部的字符串赋值给全局变量的字符串

    self.strM=string;

    NSLog(@"%@",string);

}

 

第二种方法XMLDictionary解析

 

第三种GDataXML第三方类库的解析方法(也是解析美团接口的城市列表中的城市,纬度,经度)

使用NSdata对象初始化

    GDataXMLDocument *doc=[[GDataXMLDocument alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.meituan.com/api/v1/divisions?mtt=1.help%2Fapi.0.0.im785tzf"]] options:0 error:nil];

    

    

    //获取根节点

    GDataXMLElement *rootelement=[doc rootElement];

    

    //获取根节点下的节点

    NSArray *User=[rootelement elementsForName:@"divisions"];

    

    for (GDataXMLElement *user in User)

    {

        //获取User节点的id属性

        NSString *userID=[[user attributeForName:@"id"] stringValue];

        //NSLog(@"%@",userID);

        

        //获取name节点的值

        //GDataXMLElement *namelement=[[user elementsForName:@"name"]objectAtIndex:0];

        NSString *name=[[[user elementsForName:@"name"]objectAtIndex:0] stringValue];

        NSLog(@"%@",name);

        

        //获取age节点的值

        //GDataXMLElement *agelement=[[user elementsForName:@"age"]objectAtIndex:0];

        NSString *age=[[[user elementsForName:@"location"]objectAtIndex:0] stringValue];

        //NSLog(@"%@",age);

        

        //将的到的name,age,id先放到一个字典,然后在拼接成一个集合

        NSMutableDictionary *dic=[NSMutableDictionary dictionary];

        [dic setObject:userID forKey:@"id"];

        [dic setObject:name forKey:@"name"];

        [dic setObject:age forKey:@"location"];

        [self.arrM addObject:dic];

    }

    NSLog(@"%@",self.arrM);

}

 

以上是关于XML解析的几种方法的主要内容,如果未能解决你的问题,请参考以下文章

java解析xml的几种方式哪种最好?

解析XML文件的几种常见操作方法:DOM/SAX/DOM4j

.NET中常用的几种解析JSON方法

java解析xml的几种方式,完整版开放免费下载!

Java 解析XML的几种方式:DOMSAXJDOM和DOM4J。

Flink读取HDFS中的xml(一)——读取XML的几种方式