加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml文件解析

发布时间:2020-12-16 00:24:16 所属栏目:百科 来源:网络整理
导读:1、xml文件(不带命名空间的xml) ?xml version="1.0" encoding="utf-8" ? root books book id="1" language="ch" code="111" name 甄嬛传 /name auther name 流潋紫 /name /auther price80.00/price summary 一部宫廷情感大戏,口碑极佳,被称为宫廷剧的终

1、xml文件(不带命名空间的xml)

<?xml version="1.0" encoding="utf-8" ?>

<root>

<books>

<book id="1" language="ch" code="111">

<name>甄嬛传</name>

<auther>

<name>流潋紫</name>

</auther>

<price>80.00</price>

<summary>一部宫廷情感大戏,口碑极佳,被称为宫廷剧的终结篇,是一部具有里程碑意义的经典之作。在日本,韩国,美国等相继播出。</summary>

</book>

<book id="2" language="ch" isbn="">

<name>呐喊</name>

<name>鲁迅</name>

<price>12.00</price>

<summary>揭示了中国的社会面貌,控诉了封建制度的罪恶,喊出了五四时期革命者的心声。它反映了五四彻底不妥协地反封建主义的革命精神,适应了中国革命从旧民主主义向新民主主义转变的需要,在中国现代文化史和文学史上占有重要地位!</summary>

<book id="3" language="en">

<name>哈利波特</name>

<name>JK罗琳</name>

<price>365.00</price>

<summary>主人公哈利·波特在霍格沃茨魔法学校六年的学习生活和冒险故事。</summary>

</books>

</root>


普通解析方法

//path 文件束

NSString *path = [[NSBundlemainBundle]pathForResource:@"xml"ofType:@"txt"];

NSString *xmlStr = [NSStringstringWithContentsOfFile:pathencoding:NSUTF8StringEncodingerror:nil];

//xml文档类

GDataXMLDocument *doc = [[GDataXMLDocumentalloc]initWithXMLString:xmlStroptions:0error:nil];

//根节点 root

GDataXMLElement *roorEle = [docrootElement];

//books 节点 通过索引拿到子节点

GDataXMLElement *booksEle = (GDataXMLElement*)[roorElechildAtIndex:0];

//book 节点 拿到所有子节点

NSArray *bookArray = [booksElechildren];

for (GDataXMLElement *bookElein bookArray) {

//name 节点 通过节点的名称拿到子节点

GDataXMLElement *nameELe = [[bookEleelementsForName:@"name"]lastObject];

//原型

NSLog(@"%@",nameELe.XMLString);

//打印出节点的名称和节点的值

NSLog(@"%@:%@",nameELe.name,nameELe.stringValue);

//auther节点

GDataXMLElement *authorEle = [[bookEleelementsForName:@"auther"]objectAtIndex:0];

NSLog(@"%@:%@",authorEle.name,authorEle.stringValue);

GDataXMLElement *priceEle = [bookEleelementsForName:@"price"][0];

NSLog(@"%@:%@",priceEle.name,priceEle.stringValue);

GDataXMLElement *summaryEle = [bookEleelementsForName:@"summary"][0];

NSLog(@"%@:%@",summaryEle.name,summaryEle.stringValue);

//取出book节点的属性

GDataXMLElement *idAtt = (GDataXMLElement*)[bookEleattributeForName:@"id"];

NSLog(@"%@",idAtt.XMLString);

NSLog(@"%@:%@",idAtt.name,idAtt.stringValue);

//GDataXMLElement可以表示节点和属性

//表示节点的时候,name代表节点的名称,stringValue代表节点的值

//表示属性的时候,name代表属性的名称,stringValue代表属性的值

}

Xpath解析方法

//path 文件束

NSString *path = [[NSBundlemainBundle] pathForResource:@"xml"ofType:@"txt"];

NSString *xmlStr = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];

GDataXMLDocument *doc = [[GDataXMLDocumentalloc] initWithXMLString:xmlStroptions:0error:nil];

NSArray *array = [docnodesForXPath:@"/root/books/book[@code | @isbn]/name"error:nil];

for(GDataXMLElement *elein array){

NSLog(@"%@",ele.stringValue);

}



XPath语法:

绝对路径:/root/books/book/name
相对路径://name

可以使用多路径(中间用 | 号分隔):/root/books/book/name | /root/books/book/auther/name

/*

XPath语法

/root/books/book/name | /root/books/book/auther/name 多路径绝对路径

//name 相对路径

/root/books/book[1]/name 拿到第一个book节点

/root/books/book[last()]/name拿到最后一个book节点

/root/books/book[position()<3]/name前两个节点

/root/books/book[@code]/name 包含属性为code的节点

/root/books/book[@id=1]/name 找到id1book节点

/root/books/book[@code | @isbn]/name 包含属性code或者isbnbook节点

*/


2、xml文件(带命名空间的xml)

<root xmlns:book=“http://www.baidu.com” xmlns=“http://www/sina.com.cn” >

在根元素中如果有上面这行代码的话,就表示这个xml文件是一个带命名空间的xml

xmlns:book=“http://www.baidu.com” 表示book元素的命名空间是 “http://www.baidu.com”

xmlns=“http://www.sina.com.cn” 表示这是个缺省的命名空间,是“http://www/sina.com.cn”,缺省表示如果xml中的 其他元素没有设置命名空间的话,默认就是这个


 
  使用命名空间的作用是:尽量避免命名冲突 
   
  
1、见上面
2、同上
3、解析

//path 文件束

NSString *path = [[NSBundlemainBundle] pathForResource:@"xmlns2"ofType:@"txt"];

NSString *xmlStr = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];

//xml文档类

GDataXMLDocument *doc = [[GDataXMLDocumentalloc] initWithXMLString:xmlStroptions:0error:nil];

// /xmlns:root/xmlns:books/xmlns:book/book:name

NSDictionary *ns =@{@"book":@"http://www.baidu.com",

@"xmlns":@"http://www.sina.com.cn"};

NSArray *array = [docnodesForXPath:@" /xmlns:root/xmlns:books/xmlns:book/book:name"namespaces:nserror:nil];

for(GDataXMLElement *elein array){

NSLog(@"%@",ele.stringValue);

}

3、自己创建xml文件(带命名空间的xml)

GDataXMLElement *nameEle = [GDataXMLElementelementWithName:@"name"stringValue:@"甄嬛传"];

GDataXMLElement *priceEle = [GDataXMLElementelementWithName:@"price"stringValue:@"80.00"];

GDataXMLElement *bookEle = [GDataXMLElementelementWithName:@"book"];

[bookEleaddChild:nameEle];

[bookEleaddChild:priceEle];

[bookEle addAttribute:[GDataXMLElementattributeWithName:@"id"stringValue:@"1"]];

//root节点

GDataXMLElement *rootEle = [GDataXMLElementelementWithName:@"root"];

[rootEleaddChild:bookEle];

//添加名称空间

[rootEle addNamespace:[GDataXMLElementnamespaceWithName:@""stringValue:@"http://www.baidu.com"]];

GDataXMLDocument *doc = [[GDataXMLDocumentalloc]initWithRootElement:rootEle];

//设定xml编码

[doc setCharacterEncoding:@"utf-8"];

//doc.XMLData就是我们创建好的xml文档

NSLog(@"%@",[[NSStringalloc]initWithData:[docXMLData]encoding:NSUTF8StringEncoding]);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读