欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【XML笔记】XML入门_XML文档的创建

程序员文章站 2022-05-30 10:21:44
...

一.XML

1.概述:

XMLExtensible Markup Language可扩展标记语言
是SGML(标准通用化标记语言)的一个子集,用于提供数据描述格式,适用于不同应用程序间的数据交换,这种交换不以预先定义的数据结构为前提,增强了可扩展性。
一个基本的XML文档由序言和文档元素两部分构成

2.序言

在XML文档的第一行通常是XML声明,用于说明这是一个XML文档。
XML声明的语法格式如下:
<?xmlversion="version"encoding="value" standalone="value"?>
version:用于遵循XML规范的版本号。在XML声明中必须包含version属性,该属性必须放在XML声明中的其他属性之前。
encoding:用于指定XML文档中字符使用的编码集。常用的编码集为GBK、UTF-8 等。

注:如果在XML文档中没有指定编码集,那么该XML文档将不支持中文

standalone:用于指定该XML文档是否和一个外部文档嵌套使用。取值为yes或no,设置属性值为yes,说明是一个独立的XML文档,与外部文件无关联;设置属性值为no,说明XML文档不独立。

3.文档元素

XML文档中的元素是以树形分层结构排序的,一个元素可以嵌套在另一个元素中。XML文档中有且只有一个顶层元素,称为文档元素或根元素,类似于HTML页中的<body>元素。
XML文档元素由起始标记、元素内容、结束标记3部分组成。语法格式如下:
<TagName>content</TagName>
  • <TagName>:XML文档元素的起始标记。其中TagName是元素的名称
  • content:元素内容,可以包含其他元素、字符数据、字符引用、实体引用、处理命令、注释和CDATA部分。
  • </TagName>:XML文档元素的结束标记。

4.XML语法要求:

  • XML文档必须有一个顶层元素,其他元素必须嵌套在顶层元素中。
  • 元素嵌套要正确,不允许元素间相互重叠或跨越
  • 每一个元素必须要有起始标记和结束标记,且二者元素类型名完全匹配
  • 元素可以包含属性,但属性值必须用单引号或者双引号括起来。

5.XML简单的例子:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<students>
	<student id="s001">
		<name>张三</name>
		<age>23</age>
		<tel>110</tel>
	</student>
	<student id="s002">
		<name>李四</name>
		<age>24</age>
		<tel>119</tel>
	</student>
</students>	

二.dom4j

1.概述:

dom4j是sourceforge.net上的一个Java开源项目,主要用于操作系统的XML文档,如果创建XML文档和解析XML文档。

dom4j应用于Java集合框架并完全支持DOM、SAX、JAXP,是一种适合程序员使用的JavaXML解析器,具有性能优异、功能强大和易于使用等特点。


2.dom4j的下载与配置。

http://sourceforge.net/projects/dom4j/


三.XML文档的创建

dom4j组件的一个最重要的功能就是创建XML文档。

1.创建XML文档对象

a.DocumentHelper类(dom4j包中的)的createDocument()方法可以创建一个XML文档对象。

Document doc = DocumentHelper.createDocument();

b.DocumentFactory类(dom4j包中的)的对象也可以创建一个XML文档对象。

DocumentFactory对象由DocumentFactory类getInstance()静态方法产生。

DocumentFactory df = DocumentFactory.getInstance();
Document doc = df.createDocument();

2.创建根节点

先创建一个普通节点,再把其设置为根节点
a.创建一个普通节点:
DocumentHelper的createDocument()方法
public static ElementcreateElement(String name)

name:用于指定要创建的节点名。


b.将指定的节点设置为根节点
public voidsetRootElement(Element rootElement)
rootElement:用于指定要作为根节点的普通节点

3.添加注释

为了方便阅读代码,经常在XML文档中添加注释
dom4j组件的Element对象的addComment()方法可以为指定的节点添加注释。
public ElementaddComment(String comment)
comment:用于指定注释内容
Document doc = DocumentHelper.createDocument();	//创建xml文档对象
Element p = DocumentHelper.createElement();		//创建普通结点
doc.setRootElement(p);							//将p设置为根节点
p.addComment("这是根节点");						//添加注释


4.添加属性

Element对象的方法可以为指定节点添加属性
public ElementaddAttribute(String name,String value)
name:指定属性名
value:指定属性值
Document doc = DocumentHelper.createDocument();//创建文档对象
Element root = DocumentHelper.createElement("root");//创建普通节点
doc.setRootElement(root);//将root设置为根节点
root.addAttribute("version", "1.0");//添加属性


5.创建子节点

public ElementaddElement(String name)
name:用于指定节点的名称
Element对象的addElement()方法是从 org.dom4j.Branch接口中继承的。
Document doc = DocumentHelper.createDocument();//创建文档对象
Element root = DocumentHelper.createElement("root");//创建普通节点
doc.setRootElement(root);//将root设置为根节点
Element des = root.addElement("des");//创建子节点	


6.设置节点内容

public voidsetText(String text)
text:指定节点内容
注:Element对象的setText()方法是从 org.dom4j.Node 接口中继承的。
Element des = root.addElement("des");//创建子节点
des.setText("文本");//设置子节点内容


7.设置编码

在使用 dom4j 创建XML文档时,默认编码是 UTF-8 但有时不一定要使用该编码集。
dom4j 的OutputFormat 类提供的 setEncoding()方法设置文档的编码集。
public voidsetEncoding(String encoding)
encoding:指定编码集。常用的有 GBK/GB2312(简体中文)、BIG5(繁体中文)、ISO-8859-1(西欧字符)、UTF-8(通用的国际编码)
OutputFormat outputFormat = new OutputFormat();//创建OutputFormat对象
outputFormat.setEncoding("GBK");	//设置写入流的编码为GBK
//应用上述代码后,将生成的XML文档的声明中将编码集设置为GBK
//<?xml version="1.0" encoding="GBK"?>


8.设置输出格式

应用 dom4j生成 XML 文件时,生成的XML文件默认采用紧凑方式排版。
public static OutputFormatcreateCompactFormat()
生成的XML文件设置为缩进的排版方法

public static OutputFormatcreatePrettyPrint()


9.输出XML文档

在XML文档对象创建完成并添加相应的节点后,还需要输出该XML文档,否则用户将不能看到XML的内容。在应用 dom4j 创建XML文档时,有以下两种输出方式。

a.未设置输出格式

没有设置文档输出格式时,可以使用XMLWriter类的构造方法XMLWriter(Writer writer)实例化一个XMLWriter对象,再利用该对象的write()方法写入数据,最后关闭XMLWriter对象。
String fileURL = request.getRealPath("/xml/p.xml");
XMLWriter writer = new XMLWriter(new FileWriter(fileURL));//实例化XMLWriter对象
writer.write(doc);//向流写入数据
writer.close;//关闭XMLWriter

b.已经设置了输出格式或者编码集

可以使用XMLWriter类的构造方法XMLWriter(Writer writer,OutputFormat format)实例化一个对象,再利用该对象的write()方法写入到数据,最后关闭XMLWriter对象。
OutputFormat format = new OutputFormat();//创建OutputFormat对象
format.setEncoding("GBK");//设置写入流编码
String fileURL = request.getRealPath("/xml/p.xml");//实例化XMLWriter对象
XMLWriter writer = rnew XMLWriter(new FileWriter(fileURL),format);//
writer.write(doc);
writer.close();