xml的简介

1、xml的简介

1.1 什么是xml:eXtensible Markup Language,可扩展标记型语言
(1)标记型语言:html是标记型语言,都是使用标签进行操作。
xml里面的操作也是使用标签进行操作。
(2)可扩展:html里面的标签,每个标签有自己特定的含义,比如<br/> <hr/>,
在xml中标签自己定义的,比如 <aa> <猫>
(3)xml的主要的功能是存储数据(不是显示数据)
(4)xml的版本 1.0 1.1 ,一般使用的是 1.0版本

1.2 xml的应用
(1)xml的应用在三个地方
第一,xml用于作为系统之间传输数据的格式

第二,xml用于表示生活中有关系的数据
第三,xml经常使用在系统的配置文件

2、xml的语法

2.1 xml的文档声明
(1)如果创建xml文件,在xml中必须要有一个文档声明
(2)写法: <?xml version="1.0" encoding="utf-8"?>
version : 必须要有,xml的版本 ,一般使用1.0
encoding:可选的,xml的编码方式
standalone:可选的,xml是否依赖其他文件 yes no
(3)注意:文档声明需要放在xml文件的第一行第一列


2.2 xml的元素的定义
(1)xml中的标签定义,有开始标签也要有结束标签
(2)有的标签没有内容(没有结束标签,类似于html <br/>),需要在标签内结束 <aa/>
(3)xml中的标签可以嵌套,但是必须合理嵌套
<a><b></a></b>: 这样写是不对的
正确写法:<a><b></b></a>
(4)一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签
(5)命名规范
第一,xml区分大小写,例如,<P>和<p>是两个不同的标记。
第二,xml的标签不能以数字或"_" (下划线)开头。 <1a> <_bb>: 这样写不对的
第三,xml的标签不能以xml(或XML、或Xml 等)开头。
第四,在xml的标签里面不能包含空格。<a b>: 这样写不对的
第五,xml的标签名称中间不能包含冒号(:)。 <bb:cc>: 这样写不对的


2.3 xml的属性的定义
(1)在xml的标签里面可以有多个属性,但是属性的名称不能相同
(2)属性和属性值之间需要使用=隔开,属性值需要使用引号包起来(双引号和单引号)
<aa id1="abcd" id2='qqq'></aa>
(3)属性名称的命名规范与元素的命名规范相同


2.4 xml的注释
(1)写法 <!-- 注释的内容 -->
(2)注释不能嵌套


2.5 xml的CDATA区
(1)写法: <![CDATA[ 内容 ]]>
(2)把CDATA区里面的内容当做普通文本内容,而不是标签来进行处理

3、xml的解析简介

3.1 xml解析的分类
(1)解析xml有三种方式
第一种方式:dom解析
第二种方式:sax解析
第三种方式:pull解析

* 掌握dom解析和sax解析的原理,以及优点和缺点
* 掌握pull解析代码

3.2 dom解析xml
(1)根据xml的层级结构在内存中分配一个树形结构,
document :代表整个文档
element:代表元素对象(标签)
属性对象
文本对象
node节点对象,是上面对象的父对象


(2)dom解析xml的优点:
因为分配了一个树形结构,很方便的实现增加 修改 删除的操作


(3)dom解析xml的缺点:
如果要解析的文件过大,一次性在内存中分配一个树形结构,造成内存的溢出


3.3 sax解析xml
(1)sax解析的方式:边读边解析
当使用sax方式读到特定的标签时候,自动调用相应的方法进行操作


(2)sax解析xml的优点:
不会造成内存的溢出


(3)sax解析xml的缺点:
不能实现增加 修改 删除的操作


3.4 pull解析xml

首先,导入pull的jar包(两个jar包)


(1)使用pull解析xml文件把xml中的内容放到集合里面

步骤:
* 1、创建解析器工厂
* 2、根据解析器工厂创建解析器
* 3、把要操作的文件放到解析器里面
package cn.itcast.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.XmlPullParserFactory;

public class TestPull01 {

	/**
	 * 1、创建解析器工厂
	 * 2、根据解析器工厂创建解析器
	 * 3、把要操作的文件放到解析器里面
	 */
	public static void main(String[] args) throws Exception {
		//创建解析器工厂
		XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
		//根据工厂创建解析器
		XmlPullParser parser = factory.newPullParser();
		//得到要操作文件的输入流
		InputStream in = new FileInputStream("src/stu.xml");
		//把要操作的文件放到解析器里面
		parser.setInput(in,"utf-8");
		//开始解析
		
		int type = 0;
		List<Student> 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<Student>();
				} else if("student".equals(tagName)) {
					student = new Student();
				} else if("name".equals(tagName)) {
					//得到标签里面的值
					String name = parser.nextText();
					//把name值放到对象里面
					student.setName(name);
				} else if("age".equals(tagName)) {
					String age = parser.nextText();
					student.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG:
				//当解析到结束的student时候,把对象放到list里面
				if("student".equals(tagName)) {
					list.add(student);
				}
				break;
			}
			//向下执行
			parser.next();
		}
		
		
		//遍历list集合
		for (Student stu : list) {
			System.out.println(stu.toString());
		}
	}

}

学生类:

package cn.itcast.pull;

public class Student {

	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ",age=" + age + "]";
	}
}




(2)把集合(对象)里面的数据写到xml文件中(序列化)

导入jar包


package cn.itcast.pull;

import java.io.FileOutputStream;
import java.io.OutputStream;

import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;

public class TestPull {

	/**
	 * 把对象里面的数据写到本地的xml文件中
	 * 
	 * 1、创建解析器工厂
	 * 2、根据工厂创建解析器
	 * 3、设置文件的地址
	 * @throws XmlPullParserException 
	 */
	public static void main(String[] args) throws Exception {
		//创建对象
		Student stu = new Student();
		stu.setName("zhangsan");
		stu.setAge("200");
		//创建解析器工厂
		XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
		//根据工厂创建解析器
		XmlSerializer serializer = factory.newSerializer();
		OutputStream out = new FileOutputStream("h:\\zhaoqi.xml");
		//设置文件的地址
		serializer.setOutput(out,"utf-8");
		
		//把stu对象里面的数据 写到本地的xml文件中
		serializer.startDocument(null,true);
		
		//生成开始students标签
		serializer.startTag(null,"students");
		
		//生成开始和结束的student标签
		serializer.startTag(null,"student");
		
		//生成name和age标签
		serializer.startTag(null,"name");
		//写入name的值
		serializer.text(stu.getName());
		serializer.endTag(null,"name");
		
		serializer.startTag(null,"age");
		serializer.text(stu.getAge());
		serializer.endTag(null,"age");
		
		serializer.endTag(null,"student");
		
		//生成结束students标签
		serializer.endTag(null,"students");
		
		serializer.endDocument();
	}

}

。。。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇