读书人

ios-XML施用

发布时间: 2012-11-23 22:54:33 作者: rapoo

ios--XML应用

XML应用

  1. 一. 基本概念
  1. 1.解析:从XML文档中分析出结构,编程可在程序中使用的形式的额操作被成为解析。进行解析处理的程序被称作解析器。
  2. 2. XML解析器的种类
  1. 1) DOM

XML的层次关系即为树结构,DOM解析器能直接操作树结构;

  1. 2) SAX

遵循从XML头部开始解析的思想,在读入内容的同时报告结果,又称为时间驱动的间隙器;

  1. 二. Cocoa中的解析器
  1. 1. 分类
  1. 1) DOM解析器支持:

ios-XML施用

  1. 2)SAX解析器:继承关系:

NSObjectNSXMLParser

  1. 2. DOM解析器的详细说明
  1. 1) XML文档的解析器NSXMLDocument

解析之前先进行初始化,初始化一般有三种方法,URL(NSURL)、数据(NSData),字符串(NSString)等形式;

  • -(id)initWithContentsOfURL:(NSURL *)url options:(NSUInteger)mask error:(NSError **)error
  • -(id)initWithXMLString:(NSString *)string options:(NSUInteger)mask error:(NSError **)error
  • -(id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error

    ① 使用URL时,可以指定网上的XML文档,如果是本地的文档,在URL中指定域,即以:“域://路径”形式写

    ②NSData;可以使用读入文件后的NSData数据(利用NSData的dataWithContentsOfFile方法)

    ③ mask的常用常量列表:NSXMLDocumentTidyHTML,以XML的方式进行解析;

    NSXMLDocumentTidyXML 将不正确的XML转化为正确的XML进行解析;

    NSXMLDocumentValidate 使用DTD或XML Schema进行验证

    NSXMLDocumentInclude 读入在XInclude中指定的文档;

    NSXMLDocument *document;

    NSError *error;

    document = [[NSXMLDocumentalloc]initWithContentsOfURL:url options:0error:error];

    if(!document){

    NSLog(@"error %@",[errorlocalizedDescription]);

    }

    mask选项指定为0,即没有指定任何选项;

    1. 2) XPath

    XML文档解析后,下一步就是去的目的节点了;两种方式:一是跟家父子关系进行遍历。首先取得父节点,然后是其子节点,如此反复;二,找到从根节点到目的节点的路径,然后根据此路径获得节点信息;“/rss/channel/item//title”这样的路径程序XPath

  • -(NSArray *)nodesForXPath:(NSString *)xpath error:(NSError **)error

    //

    NSArray *nodes;

    NSError *error;

    Node =[document nodesForXpath:@”/rss/channel/item/title” error:error];

    1. 3) 节点信息

    常用方法名:

    例子:<title>Cocoa</titile>

    kind NSXMLElementKind

    name title

    stringValue Cocoa

    XMLString <title>Cocoa</titile>

    1. 4)节点的父子关系

    常用的方法:

    Parent

    取得父节点

    childCount

    取得子节点的个数

    Children

    以数组的形式取得子节点

    childAtIndex: (unsigned)index

    取得由索引index指定的节点

    previousSibling

    取得上一个兄弟节点

    nextSibling

    取得下一个兄弟节点

    取得节点所属NSXMLDocument的方法:

    RootDocument

    取得当前节点的NSXMLDocument实例

    rootElement

    取得当前文档的根节点

    例子:

    -[(void)displayNodeName:(NSXMLNode *)node] {

    NSLog(@"name is %@",[node name]);

    //取得子节点

    NSEnumerator *enumerator;

    NSXMLNode *childNode;

    enumerator = [[node children] objectEnumerator];//注意遍历的方法

    while (childNode = [enumerator nextObject]) {

    [self displayNodeName:childNode];

    }

    }

    1. 5)属性值的取得:
  • -(NSXMLNode *)attributeForName:(NSString *)name

    通过名称取得属性节点

  • -(NSArray *)attributes

    取得属性节点的数组;


  • 读书人网 >操作系统

    热点推荐