XML指可扩展编辑语言(EXtensible Markup Language),是独立于软件和
硬件的信息传输工具
XML应用于web开发的许多方面,常用于简化数据的存储和共享
XML简化数据共享
XML简化数据传输
XML简化平台的变更
XML处理指令,简称PI(processing instruction) 处理指令用来只会解析引擎
如何解析XML文档内容。。
-<?xml version="1.0"encoding="utf-8"?>
在XML中,所有的处理指令都以<?开始,?>结束。<?后面紧跟的是处理指令的
名称。XML处理指令要求指定一个version属性。并允许指定可选的standalone
和encoding其中standalone是指是否允许使用外部声明,可设置为yes或no。
yes是指不使用外部声明。no为使用。encoding是指作者使用的字符编码格式。
有UTF-8,GBK,gb2312
XML文档包含XML元素
XML元素指的是从(且包括)开始标签直到(包括)结束标签的部分。元素可
包含其他元素,文本或者两者的混合物。元素也可以拥有属性。
jdbc:thin@192.168.0.26:1521:tarena
openlab
open123
XML元素可以在开始标签中包含属性,属性(Attribute)提供关于元素的额外(附加)
信息。属性通常提供不属于数据组成部分的信息,但是对需要处理这个元素的
应用程序来说却很重要。
XML属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用
如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用
…
XML 对大小写是敏感的,在XML中,标记和标记是不一样的
因此,起始和结束标记的大小写应该写成相同的
XML要求必须有根元素,所谓根元素就是不被其他元素包围,并且根元素只能有
一个。
jdbc:thin@192.168.0.26:1521:tarena
openlab
open123
这里不能再定义与datasource平级的元素
XML要求所有元素必须正确的嵌套
实体可以是常用的短语,键盘字符,文件,数据库记录或任何包含数据的项。在
XML中,有时实体内包含一些字符,如&<>等。这些均需要对其进行转义,否则
会对XML 解释器生成错误。
实体引用 字符 说明
&lt; < 小于
> > 大于
& & 与字符(和字符)
’ ’ 单引号
" " 双引号
…
SAX解析方式
SAX(simple API for XML )是一种XML解析的替代方法。相比于DOM,SAX
是一种速度更快,更有效的方法。它逐渐扫描文档,一边扫描一边解析。而且
相比于DOM,SAX可以在解析文档的任意时刻停止解析。
优点:解析可以立即开始,速度块,没有内存压力
缺点:不能对节点做修改
DOM解析方式
DOM:(Document Object Model,即文档对象模型)是W3C组织推荐的处理
XML的一种方式
DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系
解析成一个个Node对象(节点)。
优点:把xml文件在内存中构造成树形结构,可以遍历和修改节点
缺点:如果文件比较大,内存有压力,解析的时间会比较长
SAXReader读取XML文档
使用SAXReader需要导入dom4j-full.jar包
dom4j是一个java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个
非常优秀的Java XML API,具有性能优异,功能强大和易用的特点,同时他也是
一个开放源代码的软件
创建SAXReader来读取XML文档
/*
* 解析流程:
* 1:创建SAXReader
* 2:使用SAXReader读取xml 文档并生成Document
* 对象这一步就是DOM解析耗时耗资源的地方,因为会将
* 当前的xml文档解析为一棵树的结构并存入Document对象
* ,那么内容越多内存消耗越多,并且要求读取完整个XML文档
* 所以相对耗时
* 3:通过DOcument对象夺取根资源
* 4:通过根元素开始逐级获取子元素,以达到遍历XML文档数据的
* 目的
*/
//1
SAXReader reader=new SAXReader();
//2
Document doc= reader.read(new File("emplist.xml"));
//3 Document提供了获取根元素的方法
/*
* Element getRootElement()
*
*Element的每一个实例用于标识XML文档中的一个元素
*通过Element可以获取其标识的元素的相关信息
*String getName()
*获取当前元素的名字
*String getText()
*获取当前元素中间的文本(开始与结束标签中间的文本)
*/
Element root=doc.getRootElement();
/*
* 生成一个XML文档步骤
* 1.创建一个Document对象,标识一个空白文档
* 2.向Document中添加根元素
* 3.向根元素中逐级添加子元素已达到XML文档应有的结构
* 4.创建XMlWriter
* 5.将Document对象通过XmlWriter写出以生成XML文档
*/
package xml;
import java.io.FileOutputStream;
import java.io.Writer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.RowSetInternal;
import javax.sql.rowset.WebRowSet;
import javax.sql.rowset.spi.XmlWriter;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
/**
* 使用Dom4j生成一个XML文档
* @author
*
*/
public class WriteXmlDemo {
public static void main(String[] args) {
List<Emp> list=new ArrayList<Emp>();
list.add(new Emp(1, "张三", 22, "男", 5000));
list.add(new Emp(2, "爷爷", 22, "女", 6000));
list.add(new Emp(3, "弟弟", 22, "男", 7000));
list.add(new Emp(4, "爸爸", 22, "女", 8000));
list.add(new Emp(5, "儿子", 22, "男", 9000));
/*
* 生成一个XML文档步骤
* 1.创建一个Document对象,标识一个空白文档
* 2.向Document中添加根元素
* 3.向根元素中逐级添加子元素已达到XML文档应有的结构
* 4.创建XMlWriter
* 5.将Document对象通过XmlWriter写出以生成XML文档
*/
try {
//1
Document doc=DocumentHelper.createDocument();
//2
Element root= doc.addElement("list");
/*
* 将以每个员工信息以一个<emp>标签添加到<list>中
*/
for (Emp emp : list) {
//向<list>中添加子标签<emp>
Element empEle= root.addElement("emp");
Element nameEle=empEle.addElement("name");
nameEle.addText(emp.getName());
Element ageEle=empEle.addElement("age");
ageEle.addText(emp.getAge()+"");
Element genderEle=empEle.addElement("gender");
genderEle.addText(emp.getGender());
Element salaryEle=empEle.addElement("salary");
salaryEle.addText(emp.getSalary()+"");
empEle.addAttribute("id", emp.getId()+"");
}
XMLWriter writer=new XMLWriter(new FileOutputStream("myemp.xml"));
writer.write(doc);
System.out.println("写出完毕");
writer.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}