您的位置:首页 > 其它

文章标题

2016-05-07 21:48 323 查看

XML

1.XML简介

1,什么是XML

eXtensible 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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: