文章标题
2016-05-07 21:48
323 查看
XML
1.XML简介
1,什么是XMLeXtensible Markup Language可扩展标记型语言.
标记型语言: html也是标记型语言,都是使用标签进行操作.xml里面的操作也是使用标签进行操作.
可扩展: html里面的标签,每个标签都有自己特定的含义,eg:< br/>,< hr/>等,但是在xml里面标签可以自己定义,eg:< aa>< /aa>,< name>< /name>等
xml的主要功能是存储数据,(html是显示数据).
xml的版本有1.0,1.1,一般使用1.0版本,它可以向下兼容.
2,xml的应用
一般用在三个地方:
系统之间传输数据的格式
表示生活中有关系的数据
系统的配置文件
2.xml语法
2.1 xml文档声明(必须第一行第一列)< ?xml version = ‘1.0’ encoding = ‘utf-8’ standalone = ‘yes’?>
2.2 xml元素的定义:
xml中定义的标签,得又开始标签和结束标签.
有的标签没有内容,就在标签内结束eg:< aa/>.
xml标签可以嵌套,但必须合理签到< a>< b>< /b>< /a>.
一个xml必须有且只能有一个根标签
命名规范:
区分大小写
不能以数字或者下划线开头,不能以xml开头(Xml…)
在标签中不能有空格
标签中间不能有冒号”:”
2.3 xml属性的定义:
在xml标签里面可以有多个属性,但是属性名称不能相同(这不是废话吗).
属性和属性值之间需要用”=”隔开,属性值用引号引住.”属性值”.
属性名称的命名规范与元素命名规范一样.
2.4 xml注释:
写法< !– 注释内容 –>
注释不能嵌套.
2.5 xml的CDATA区域
写法
3.XML解析简介
3.1xml解析方法分类第一种:dom解析–根据xml层级结构,在内存分配树形结构.
优点:很方便的实现增加,修改,删除扥操作
缺点:如果解析的文件过大,可能造成内存溢出
第二种:sax解析:–边读边解析
优点:不会造成内存溢出
缺点:不能实现增加,修改,删除的操作
第三种:pull解析
首先导入pull的jar包(两个1.KXML2-2.3.0jar,2.xmlpull_1_1_3_4c.jar)
创建解析器工厂
创建解析器
创建需要解析文件的输入流
把文件放到解析器里面
把(集合)里面的数据写到xml文件中(序列化factory.xmlserilizable)
创建解析器工厂
创建序列器
创建序列的输出流
把文件放到序列器
开始序列化.代码如下:
> 解析xml: package com.heima.pull; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; public class TestPull02 { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // 创建解析器工厂 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 根据工厂获得解析器 XmlPullParser parser = factory.newPullParser(); // 创建文件io流 InputStream in = new FileInputStream("src/stu.xml"); // 把文件放到解析器里面 parser.setInput(in, "utf-8"); // 开始解析 int type = 0; List list = null; Student student = null; while ((type = parser.getEventType()) != XmlPullParser.END_DOCUMENT) { String tagname = parser.getName(); /* * 1,如果解析到students,创建list集合 2,如果解析到student,创建student对象 * 3,如果解析到name和age,获取标签里面的内容 4,把内容放到student对象里面 */ switch (type) { case XmlPullParser.START_TAG: if("students".equals(tagname)){ //创建list集合 list = new ArrayList(); }else if("student".equals(tagname)){ student = new Student(); }else if("name".equals(tagname)){ String name = parser.nextText(); student.setName(name); }else if("age".equals(tagname)){ String age = parser.nextText(); student.setAge(age); } break; case XmlPullParser.END_TAG: //当解析到结束时,把对象放到list里面 if("student".equals(tagname)){ list.add(student); } break; default: break; } //向下执行 parser.next(); } for (Student s : list) { System.out.println(s); } } ----------------------------------------------- xml序列化 package com.heima.seri; import java.io.FileOutputStream; import java.io.OutputStream; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import com.heima.pull.Persons; public class TestPull3 { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Persons s = new Persons(); s.setName("燕青"); s.setAge("22"); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlSerializer serializer = factory.newSerializer(); OutputStream os = new FileOutputStream("src/person1.xml"); serializer.setOutput(os,"utf-8"); serializer.startDocument(null, true); serializer.startTag(null, "persons"); serializer.startTag(null, "person"); serializer.startTag(null, "name"); serializer.text(s.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age"); serializer.text(s.getAge()); serializer.endTag(null, "age"); serializer.endTag(null, "person"); serializer.endTag(null, "persons"); serializer.endDocument(); } }
相关文章推荐
- (OK) Fedora 23——CORE——docker——(3)——> install-docker
- 最小生成树Kruskal算法+并查集实现
- java统计文本中的不同的单词和重复的单词
- 简易SpringIOC容器(初学)
- C语言的缓冲区
- ARIMA学习总结
- (OK) Fedora 23——CORE——docker——(2)——> install-quagga
- (OK) Fedora 23——CORE——docker——(1)——> install-kernel
- 用两个栈实现队列之程序员面试经典
- linux下使用百度云以及酷我音乐
- iOS开发-UI控件:可折叠展开的UITableView
- C# 多线程操作之异步委托
- Leetcode 278 First Bad Version 二分查找(二分下标)
- 堆排序
- android(base)--Activity基本配置
- Tinyhttpd阅读笔记
- confluent libserdes 编译运行
- Linux基础命令之grep
- Pig的安装配置
- 关于Android中内容操作数据库失败的原因及修改方法