XML解析
<?xml version="1.0" encoding="utf-8"?>
<root name="中国">
<province name="北京市" postcode="110000">
<city name="市辖区" postcode="110100">
<area name="东城区">
<postcode>110101</postcode>
</area>
<area name="西城区">
<postcode>110102</postcode>
</area>
</city>
</province>
</root>
- 任何的起始标签都必须有一个结束标签
元素、属性、文本。
Pull解析
Sax解析
- 示例工程名 : SaxParse
- Simple API for XML
生成解析器:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(DataInputStream,ParseHandler);
parse()函数接受两个参数,前者是数据的输入流 , 后者是 extends 了 DefaultHandler 的解析类。然后你只要在parse函数之后,直接获取解析类中的解析出来的对象表就可以了
provinceList = handler.provinceList;
自动将事件推入执行函数进行处理,所以你只要在解析类中填写处理方法就可以了。
- 属性名~属性值 Attributes.getQName(0) ~ Attributes.getValue(0)
- 文本内容 自动调用characters()函数
总结
- Pull和Sax类似,都是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Pull和Sax都比较节约内存资源,不会像Dom那样要把所有节点以对树的结构展现在内存中。 但Pull比Sax更加可定制,因为Pull可以在满足了需要的条件后不再获取事件,结束解析。所以安卓官方更推荐使用Pull解析。
debug查看pull解析流程
- 开始标签之后即使是空的,但是却有一个隐藏的换行符(假如xml格式化),也可以产生文本事件
- XmlPullParser.nextText() :
If current event is START_TAG then if next element is TEXT then element content is returned or if next event is END_TAG then empty string is returned,otherwise exception is thrown. After calling this function successfully parser will be positioned on END_TAG.
测试
按岗位分
- 黑盒测试:测试业务逻辑 - 用户角度
- 白盒测试:测试逻辑方法 - 开发者角度
按测试粒度
- 方法测试 function
- 单元测试 unit
- 集成测试 integration
- 系统测试 system
按暴力程度
自动化测试工具
单元测试框架