zoukankan      html  css  js  c++  java
  • iOS开发之XML解析

    iOS开发之XML解析

    1.XML格式

    <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码

    <root> 表示根节点

    <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值

    <Item key="1" value="A"></Item>     key="1"是结点属性, key属性名, "1"属性值

    注意: XML结构理解为层层嵌套的树形结构

    <?xml version="1.0" encoding="utf-8" ?>
    <root>
        <systemConfig>
          <CityName>北京</CityName>
          <CityCode>201</CityCode>
          <ParentCityCode> 0</ParentCityCode>
          <areaCode>010</areaCode>
          <AgreementUrl></AgreementUrl>
          <IntentionLevel>                       
            <Item key="1" value="A"></Item>
            <Item key="2" value="B"></Item>
            <Item key="3" value="C"></Item>
          </IntentionLevel>
          <ComeChannel>                           
            <Item key="1" value="报纸"></Item>
            <Item key="2" value="杂志"></Item>
          </ComeChannel>
          <BuyCarBudget>                       
            <Item key="1" value="40-50万"></Item>
            <Item key="2" value="50-60万"></Item>
          </BuyCarBudget>
         <IntentionColor>
             <Item key="1" value="红"></Item>
             <Item key="2" value="黄"></Item>
         </IntentionColor>
        </systemConfig>
    </root>

    2.如何使用GData开源库实现XML解析

       常用的XML解析方式

      (1)unix - libxml2 C接口

      (2)NSXMLParser UI提供的XML解析库, 使用比较麻烦

      (3)google开发GData

    2.1配置

    //配置XML库(配置完才能使用)
        //(1)添加头文件搜索路径
        //      Header Search Paths-> /usr/include/libxml2
        //(2)添加二进制库
        //  Link library ->  lixml2.dylib
        //(3)源文件添加编译选项
        //      -fno-objc-arc
        //(4)添加头文件
        //  #import "GDataXMLNode.h"

    2.2 GData的使用

    //1.加载和解析XML文件
        NSString *path = [[NSBundle mainBundle] pathForResource:@"xml.txt" ofType:nil];
        NSData *data = [[NSData alloc] initWithContentsOfFile:path];
        // GDataXMLDocument 表示XML文档对象
        // initWithData 使用NSData初始化, 就是解析
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
        
        //2.获取指定结点 XPath
        //CityName路径: /root/systemConfig/CityName
        NSArray *array = [doc nodesForXPath:@"/root/systemConfig/CityName" error:nil];
        //CityName
        GDataXMLElement *element = [array firstObject];
        NSLog(@"name=%@ value=%@",element.name,element.stringValue);
        
        //3.获取指定结点的属性
        NSArray *items = [doc nodesForXPath:@"/root/systemConfig/ComeChannel/Item" error:nil];
        GDataXMLElement *item = [items firstObject];
        //获取属性, 属性使用GDataXMLElement表示
        for(GDataXMLElement *attr  in item.attributes)
        {
            NSLog(@"a-name=%@ avalue=%@",attr.name,attr.stringValue);
        }
        
        
        //4.获取所有指定名字的结点(不管位置)
        //XPath语法: //Item
        NSArray *allItem = [doc nodesForXPath:@"//Item" error:nil];
        for (GDataXMLElement *e in allItem) {
            NSLog(@"name = %@",e.name);
        }
        
        //5.获取所有指定名字的属性(不管哪个结点的)
        //XPath语法: //@value
        NSArray *allValue = [doc nodesForXPath:@"//@value" error:nil];
        for (GDataXMLElement *e in allValue) {
            NSLog(@"value = %@",e.stringValue);
        }
        
        //6.逐层遍历XML文件
        //获取根节点
        GDataXMLElement *root = doc.rootElement;
        //获取子节点
        //root.children
        //获取子节点个数
        //root.childCount
        //获取指定名字的子节点
        //root elementsForName:<#(NSString *)#>

     实例代码: 点我下载

  • 相关阅读:
    mysqldump 导出数据库为DBname的表名为Tname的表结构 导出数据库的所有表的表结构
    mysqldump 备份某张表 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions,
    nfs missing codepage or helper program, or other error
    date 增加一个小时 减少一个小时
    mysqldump 备份单个数据库
    mysql删除账户
    怎么删除某个用户的所有帖子?
    mongodb删除重复数据
    ReSharper2018破解详细方法
    激活windows和office
  • 原文地址:https://www.cnblogs.com/quietw/p/4386234.html
Copyright © 2011-2022 走看看