XML 的组成语法及解析

原创 2015年11月18日 20:37:22

XML可扩展标记语言

优点:代码的安全性很高,可以很容易的替换模板。
缺点:开发成本太高

组成部分

  • 文档声明(在xml文档的最前面,必须写一个文档声明,用来声明xml文档的类型)最常用的文档的字符编码如下
 <?xml version="1.0" encoding="UTF-8"?>
  • 元素
    这里写图片描述
    一个元素可以嵌套若干个子元素(不能出现交叉嵌套)
    规范的XML文档最多只有一个跟元素,其他元素都是跟元素的子孙元素
    xml中的所有空格和换行,都会当做具体内容来处理

  • 属性
    这里写图片描述

XML解析

DOM:一次将所有的XML文档加载进内存,比较适合解析小文件(对应goole)
SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析较大的文件(对应苹果原生)

XML解析方式的选择建议:

  1. 大文件:NSXMLParser(苹果原生)
  2. 小文件:GDataXML(goole的)

用GDataXML解析
导入第三方文件到xcode,配置xcode
第一步:导入动态库,在 xcode首页 的 General 下面
这里写图片描述

第二步:
这里写图片描述

第三步:
这里写图片描述

第四步:取消GDataXML的arc编译环境,方法同JSONKit的配置

GDDataXML中常用的类和方法

  1. GDataXMLDocument : 代表整个xml文档
  2. GDataXMLElement : 代表文档中的元素
  3. attributeForName : 元素对象方法,可以获得属性值
  4. elementsForName : 元素对象方法,获得这个元素的所有子元素
  5. rootElement : 元素对象方法,获取根元素

相比之下,JSON的体积小于XML,所以服务器返回给移动端的数据格式以JSON居多

代码举例

-(void)saxCcick{
    NSString *xmlPath = [[NSBundle mainBundle]pathForResource:@"bookstore" ofType:@"xml"];
    NSURL *url = [NSURL fileURLWithPath:xmlPath];

    //创建解析器对象
    NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
    //设置委托
    parser.delegate = self;

    if (![parser parse]) {
        NSLog(@"解析失败");
    }
}

#pragma mark - nsxmlParserDelegate

//解析开始 创建储存对象
-(void)parserDidStartDocument:(NSXMLParser *)parser{
    _bookArray = [NSMutableArray array];
}

//解析 开始标签 调用,初始化模型,将元素的属性存储到模型
-(void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
 namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
   attributes:(NSDictionary *)attributeDict{
    if ([elementName isEqualToString:@"book"]) {
        //初始化模型
        _mode = [BookMode new];
        _mode.category = attributeDict[@"category"];
    }else if ([elementName isEqualToString:@"title"]){
        _mode.lang = attributeDict[@"lang"];
    }else if ([elementName isEqualToString:@"auther"]){
        _mode.author = attributeDict[@"auther"];
    }else if ([elementName isEqualToString:@"year"]){
        _mode.year = attributeDict[@"year"];
    }else if ([elementName isEqualToString:@"price"]){
        _mode.price = attributeDict[@"price"];
    }
}

//找到元素内容,内容暂时存在中间变量,中间变量是动态刷新的
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    //内容赋给中间变量
    _tempStr = string;
}
//解析 结束标签 调用,给模型元素赋值
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
    if ([elementName isEqualToString:@"book"]) {
        [_bookArray addObject:_mode];//解析到最后把模型加载到数组中
    }else if (![elementName isEqualToString:@"bookstore"]){
        NSLog(@"====key=%@=====value=%@",elementName,_tempStr);
        //kvc
//        if ([elementName isEqualToString:@"id"]) {
//            [_mode setValue:_tempStr forKey:@""];
//        }
        [_mode setValue:_tempStr forKey:elementName];//?????????

    }
}

//文档解析结束调用
-(void)parserDidEndDocument:(NSXMLParser *)parser{
    NSLog(@"%ld",_bookArray.count);
}

//文档解析失败调用
-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
    NSLog(@"失败");
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

XML学习笔记(三):XML规范:Schema详解

二、XML Schema 规范 1、简介: 1)Xml Schema 也是一种定义和描述Xml文档结构域内容的模式语言,其出现是为了克服DTD的局限性。 2)Xml Schema与DTD: ...
  • u012228718
  • u012228718
  • 2014年11月14日 07:07
  • 4126

Go语言关于XML的读取与生成

要读取的XML如下: Loading video… what 这种结构的XML,其末节点是属性与文本并存的(网上看到的大部分教程都是属性节点就是属性节点,文本节点就是文本节点) 根据这...
  • windvix
  • windvix
  • 2015年03月13日 10:57
  • 2641

dom4j组装xml 以及解析xml

dom4组装xml 以及解析xml
  • QH_JAVA
  • QH_JAVA
  • 2014年08月06日 21:12
  • 5929

【XML解析】(5)DOM4J中的XPath的使用方式及其【完整语法详细说明】

XPath简单介绍:XPath是指:XML PATH Language。特点:可以实现快速查询。XPaht所在的包路径:准备Xpath的包: jaxen.jar: XPATH包含: ...
  • qq_35415600
  • qq_35415600
  • 2017年05月30日 14:05
  • 198

【iOS开发】XML解析--GData语法

GData旨在解析XML文档。 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输...
  • a316212802
  • a316212802
  • 2016年01月14日 17:03
  • 742

XML语法 XML解析

1. XML语法 1.1. XML用途 1.1.1. XML用途 XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 we...
  • kuangzhixuan
  • kuangzhixuan
  • 2017年07月04日 09:01
  • 50774

XML语法以及书写规范,Jaxp Dom解析XML

1.XML语法 1.1XML元素书写的规范 XML必须有且仅有一个根标签,其他标签都是这个根标签的子标签。 区分大小写,例如,和是两个不同的标记。不能以数字或“_”(下划线)开头。不能以xml(或...
  • qq_18407565
  • qq_18407565
  • 2017年04月10日 22:39
  • 129

RDF/XML及RDFa语法示例

  • 2018年01月17日 16:22
  • 913B
  • 下载

SOAP语法XML

  • 2016年07月23日 08:42
  • 14KB
  • 下载

xml语法规则

  • 2013年12月01日 21:11
  • 24KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML 的组成语法及解析
举报原因:
原因补充:

(最多只允许输入30个字)