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>
- 任何的起始标签都必须有一个结束标签
元素、属性、文本。
- 任何有标签的都属于元素。
- 在开始标签内,除了第一个是元素名字 (比如以上的“root”、“province”、“city”、“area”、“postcode”),剩余的则称为元素属性。元素属性又分为 属性名和属性值 (比如属性名是name,对应的属性值就是”北京市” ; 属性名是postcode , 对应的属性值就是”11000”)
- 被元素标签包裹(从开始标签到结束标签)的则称为元素内容
- 上例中,被标签包裹的 110101 叫做 文本
可以将文本和文本的上级标签合并成上上级标签的属性。比如上例”东城区”元素可修改为
<area name="东城区" postcode="110101"> </area>
Pull解析
- 示例工程名 : PullParse
XmlPullParser Pull解析器,有两种方式创建解析器:
方式一: org.xmlpull.v1.XmlPullParserFactory
XmlPullParserFactory xpf = XmlPullParserFactory.newInstance();//构造工厂实例 XmlPullParser parser = xpf.newPullParser();//创建解析对象
方式二: android.util.Xml
XmlPullParser parser = Xml.newPullParser();
手动获取事件,自行判定事件类型并做相应处理
- Pull解析有一个整型变量(类指针),通过 XmlPullParser.getEventType()获取, 通过XmlPullParser.next() 移动
- 属性名~属性值 XmlPullParser.getAttributeName(0) ~ XmlPullParser.getAttributeValue(0)
- 文本 XmlPullParser.nextText();
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
按暴力程度
- 冒烟测试 smoke
- 压力测试 pressure
自动化测试工具
- 安卓提供 monkey , 模拟屏幕随机触摸事件