XML知识

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; < 小于
> > 大于
& & 与字符(和字符)
’ ’ 单引号
&quot " 双引号

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();
		}
		
		
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值