9.xml语言介绍
xml是什么 xml是w3c这个组织研发的.xml指可扩展(标签可以自己定义student)标记(标签)语言
xml有什么用
①可以描述现实生活中的数据
②可以作为应用程序的配置文件 比如android工程的布局文件.
③作为应用程序传输的数据格式
xml怎么用
常见的码表 assic --->iso-8859-1--->gbk gb2312(收录汉字不一样多)--->utf-8;
①直接使用eclipse创建既可
②文档声明 <?xml version="1.0" encoding="UTF-8"?>
③ xml对大小写敏感 开始标签和结束标签成对出现 xml必须有且仅有一个根标签 属性值必须加引号
④ xml中注释 <!-- -->
⑤ cdata区里面的内容不会被解析器解析
10.xml解析技术介绍
1.dom 特点:把整个xml文件加载到内存中,会在内存中形成一颗树形结构.
优点:可以进行增删改查逻辑
缺点:会造成内存溢出.
2.sax
特点:一行一行解析 边解析边释放.
优点:它不会造成内存溢出
缺点:它只能查,不能实现增 删 改.
3.xmlpull 是android中内置解析器. 它解析原理 类似sax.
4.
xmlpull
代码实现
☆
☆
☆ 由于xmlpull解析技术是android的技术所以这个技术默认只能在android工程中使用.
@Test
public void xmlpullParser2() throws Exception{
//1.创建xml解析器的工厂 通过查看api文档得知
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//2.通过工厂的实例 获取xml解析器
XmlPullParser parser = factory.newPullParser();
//3.告诉解析器要解析哪个文件
parser.setInput(new FileInputStream("bookstore.xml"), "utf-8");
//4.获取要解析文件的事件类型 sax是基于事件解决
int eventType = parser.getEventType();
//5.通过循环来解析xml文件 没有解析到文件结尾就一直解析 1阅读性查
while(eventType!= XmlPullParser.END_DOCUMENT){
if ("name".equals(parser.getName())) {
String name = parser.nextText();
System.out.println("name:"+name);
}else if ("price".equals(parser.getName())) {
String price = parser.nextText();
System.out.println("price:"+price);
}
eventType = parser.next();
}
}
5.把解析出来的数据封装到集合List. 为什么要封装到集合里.目的就是为了方便展示信息.
@Test
public void xmlpullParser3() throws Exception {
// 0.创建一个集合 javabean entity
List<Book> lists = null;
Book book = null;
// 1.创建xml解析器的工厂 通过查看api文档得知
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 2.通过工厂的实例 获取xml解析器
XmlPullParser parser = factory.newPullParser();
// 3.告诉解析器要解析哪个文件
parser.setInput(new FileInputStream("bookstore.xml"), "utf-8");
// 4.获取要解析文件的事件类型 sax是基于事件解决
int eventType = parser.getEventType();
// 5.通过循环来解析xml文件 没有解析到文件结尾就一直解析 1阅读性查
while (eventType != XmlPullParser.END_DOCUMENT) {
// 6.具体判断一下到底解析的是开始标签还是结束标签
switch (eventType) {
case XmlPullParser.START_TAG: //代表解析的是开始标签
//6.1 具体判断一下到底是哪个开始标签
if ("bookstore".equals(parser.getName())) {
//6.2 初始化list集合
lists = new ArrayList<>();
}else if ("book".equals(parser.getName())) {
//6.3创建book对象
book = new Book();
}else if ("name".equals(parser.getName())) {
//6.4 获取name对应数据
String name = parser.nextText();
book.setName(name);
}else if ("price".equals(parser.getName())) {
//6.4 获取name对应数据
String price = parser.nextText();
book.setPrice(price);
}
break;
case XmlPullParser.END_TAG: //代表解析的是结束标签
if ("book".equals(parser.getName())) {
//6.5 把book对象加入到list集合
lists.add(book);
}
break;
}
//不停的解析
eventType = parser.next();
}
//7 当while循环结束后 我们看list集合里面有几本书
for (Book book2 : lists) {
System.out.println(book2);
}
}