YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

学习XML解析基础篇

XML解析

  • SAX解析

    • 写一个本地xml数据

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      <students>
      <student>
      <name>Juju</name>
      <sex>Female</sex>
      <age>20</age>
      </student>
      <student>
      <name>Julia</name>
      <sex>Female</sex>
      <age>19</age>
      </student>
      <student>
      <name>Junior</name>
      <sex>Male</sex>
      <age>21</age>
      </student>
      </students>
    • 写一个类,重写description的方法

      1
      2
      3
      4
      - (NSString *)description
      {
      return [NSString stringWithFormat:@"name:%@, sex:%@, age:%@", self.name, self.sex, self.age];
      }
    • 实现xml解析,首先要先找到xml文件的路径NSString *fileName = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];,再通过路径创建一个连接NSURL *url = [[NSURL alloc] initFileURLWithPath:fileName];再根据yrl创建解析的类NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];

    • 设置代理parser.delegate = self;,开始解析[parser parse];

    • 实现以下方法,开始解析到解析完毕

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      //开始解析文档
      - (void)parserDidStartDocument:(NSXMLParser *)parser;
      //开始解析文档的标签
      - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict;
      //开始解析文档内容
      - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
      //遇到结束标签
      - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
      //解析文档结束
      - (void)parserDidEndDocument:(NSXMLParser *)parser;
    • 编译运行的结果

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      2016-11-11 11:44:49.247 XML_Study[90199:800056] 开始解析文档
      2016-11-11 11:44:49.248 XML_Study[90199:800056] 遇到开始标签:students
      2016-11-11 11:44:49.248 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.249 XML_Study[90199:800056] 遇到开始标签:student
      2016-11-11 11:44:49.249 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.250 XML_Study[90199:800056] 遇到开始标签:name
      2016-11-11 11:44:49.251 XML_Study[90199:800056] 遇到内容:Juju
      2016-11-11 11:44:49.251 XML_Study[90199:800056] 遇到结束标签:name
      2016-11-11 11:44:49.252 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.252 XML_Study[90199:800056] 遇到开始标签:sex
      2016-11-11 11:44:49.253 XML_Study[90199:800056] 遇到内容:Female
      2016-11-11 11:44:49.253 XML_Study[90199:800056] 遇到结束标签:sex
      2016-11-11 11:44:49.253 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.254 XML_Study[90199:800056] 遇到开始标签:age
      2016-11-11 11:44:49.254 XML_Study[90199:800056] 遇到内容:20
      2016-11-11 11:44:49.255 XML_Study[90199:800056] 遇到结束标签:age
      2016-11-11 11:44:49.255 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.256 XML_Study[90199:800056] 遇到结束标签:student
      2016-11-11 11:44:49.256 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.257 XML_Study[90199:800056] 遇到开始标签:student
      2016-11-11 11:44:49.257 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.257 XML_Study[90199:800056] 遇到开始标签:name
      2016-11-11 11:44:49.258 XML_Study[90199:800056] 遇到内容:Julia
      2016-11-11 11:44:49.258 XML_Study[90199:800056] 遇到结束标签:name
      2016-11-11 11:44:49.258 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.259 XML_Study[90199:800056] 遇到开始标签:sex
      2016-11-11 11:44:49.259 XML_Study[90199:800056] 遇到内容:Female
      2016-11-11 11:44:49.259 XML_Study[90199:800056] 遇到结束标签:sex
      2016-11-11 11:44:49.260 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.260 XML_Study[90199:800056] 遇到开始标签:age
      2016-11-11 11:44:49.260 XML_Study[90199:800056] 遇到内容:19
      2016-11-11 11:44:49.260 XML_Study[90199:800056] 遇到结束标签:age
      2016-11-11 11:44:49.260 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.261 XML_Study[90199:800056] 遇到结束标签:student
      2016-11-11 11:44:49.261 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.261 XML_Study[90199:800056] 遇到开始标签:student
      2016-11-11 11:44:49.261 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.262 XML_Study[90199:800056] 遇到开始标签:name
      2016-11-11 11:44:49.262 XML_Study[90199:800056] 遇到内容:Junior
      2016-11-11 11:44:49.262 XML_Study[90199:800056] 遇到结束标签:name
      2016-11-11 11:44:49.262 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.263 XML_Study[90199:800056] 遇到开始标签:sex
      2016-11-11 11:44:49.263 XML_Study[90199:800056] 遇到内容:Male
      2016-11-11 11:44:49.263 XML_Study[90199:800056] 遇到结束标签:sex
      2016-11-11 11:44:49.263 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.263 XML_Study[90199:800056] 遇到开始标签:age
      2016-11-11 11:44:49.264 XML_Study[90199:800056] 遇到内容:21
      2016-11-11 11:44:49.264 XML_Study[90199:800056] 遇到结束标签:age
      2016-11-11 11:44:49.264 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.264 XML_Study[90199:800056] 遇到结束标签:student
      2016-11-11 11:44:49.264 XML_Study[90199:800056] 遇到内容:
      2016-11-11 11:44:49.265 XML_Study[90199:800056] 遇到结束标签:students
      2016-11-11 11:44:49.265 XML_Study[90199:800056] 解析文档结束
      2016-11-11 11:44:49.265 XML_Study[90199:800056] name:Juju, sexFemale, age@20
      2016-11-11 11:44:49.266 XML_Study[90199:800056] name:Julia, sexFemale, age@19
      2016-11-11 11:44:49.267 XML_Study[90199:800056] name:Junior, sexMale, age@21