java 与 xml_Java和XML

XML文档结构

一个XML文档结构由根元素、元素、元素属性、文本组成,引用w3school上的一张图和说明:

96ac31c24244f68067772acb5db85d56.png

上图表示下面的 XML 中的一本书:

<?xml vesion=”1.0” standalone=”yes” encoding=”utf-8”>    ---- XML声明

                                                        ---- 根元素

                   ---- 为元素、元素属性 category、文本 Harry Potter,包括

4个子元素:title、author、year、price

Harry Potter         ----- 为元素、Harry Potter为文本内容

J K. Rowling

2005

29.99

Learning XML

Erik T. Ray

2003

39.95

Everyday Italian

Giada De Laurentiis

2005

30.00

1. XML声明:是一个XML处理指令,其中version、standalone、encoding是三个特性

•version: 说明这个文档符合1.0规范

•standalone: 说明文档在这一个文件里还是需要从外部导入, standalone 的值设为yes 说明所有的文档都在这一文件里完成

•encoding: 指文档字符编码

2. XML根元素:必须有一个根元素。

根元素的起始标记要放在所有其它元素起始标记之前,根元素的结束标记根放在其它所有元素的结束标记之后。

3. XML元素

•元素标记区分大小写, 与 是两个不同的标记

•结束标记必须有反斜杠,如

XML元素标记命名规则如下:

•名字中可以包含字母,数字及其它字母

•名字不能以数字或下划线开头

•名字不能用xml开头

•名字中不能包含空格和冒号

4. XML注释

•注释中不要出现“--”或“-”

•注释不要放在标记中

•注释不能嵌套

5.  PI(Processing Instruction)

PI 指 Processing Instruction, 处理指令。PI以“”开头,以“?>”结束,用来给下游的文档传递信息。

6  PCDATA

#PCDATA: specifies that an element will contain parsed character data.

7  CDATA

CDATA用于需要把整段文本解释成纯字符数据而不是标记的情况。当一些文本中包含很多“”,“&”,“””等字符而非标记时,CDATA会非常有用。

以“”结束。注意,在CDATA段中不要出现结束定界符“]]>”。

8  Entities(实体)

Entities(实体)是XML的存储单元,一个实体可以是字符串,文件,数据库记录等。实体的用处主要是为了避免在文档中重复输入,我们可以为一个文档定义一个实体名,然后在文档里引用实体名来代替这个文档,XML解析文档时,实体名会被替换成相应的文档。

XML为五个字符定义了实体名:

实体

字符

<

<

>

>

&

&

"

'

9  DOCTYPE

“]>”紧随XML声明,包括所有实体的声明

比较容易混淆的问题:

1. Node与Element的区别:

首先,node和Element是两个领域的概念。

node从数据结构tree上来讲的,tree由node组成。element则是XML里的概念,是XML中的数据的组成部分之一。

在Java中常用DOM来解析XML文档,DOM(文档对象模型)是对XML数据的描述体系,它用树型结构的文档来保存XML数据。它把XML文档看作是一系列node和node间的关系,并且把每一个node都当作一个对象,所以叫文档对象模型。

DOM将文档中的所有都看作节点,也就说,所有的XML单元,无论是文档、元素还是属性、文本,在DOM中都是一个Node(节点),每个Node又可以包容其他的Node,这样就构成了一个树型结构。

node有几个子类型:Element, Text, Attribute, RootElement, Comment, Namespace等,其中Element是可以有属性和子节点的node。故一个节点不一定是一个元素,而一个元素一定是一个节点。只有含有完整信息的节点才能成为一个元素。

DOM文档树中不同类型的节点是由指定的Node子接口表示。每个Node对象都有nodeType属性,这些属性指定节点的类型。

在DOM在解析文档的时候按整个文档的结构生成一棵树,全部保存在内存中。虽然DOM中所有的对象均能继承用于处理父节点和子节点的属性和方法,但是并不是所有的对象都拥有父节点或子节点。例如,文本节点不能拥有子节点。另一个需要注意的地方就是,XML文档两个标签之间的空白也是这棵树的一个节点(Text节点), 包括回车、Tab等。。

DOM的基本用法:

1、创建Document

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  //DocumentBuilderFactory类可以用为DOM的主入口

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse("abc.xml");

2、浏览XML文档的内容

获得Document后的第一步就是获得root element,也叫document element:

Element root = doc.getDocumentElement();

3、修改XML文档

修改已有节点的值调用Node.setNodeValue();

修改已有的节点,调用replaceChild();

删除一个节点调用removeChild();

创建新节点,使用append()或insertBefore()来插入到合适的地方。

此外Attr比较特殊:为一个元素添加属性需要用setAttribute()方法,而删除属性则要用removeAttribute()方法,修改属性值调用用setValue();

4.输出XML文档

输出到磁盘上,事实上和DOM没什么关系,而是用FileWriter或FileOutputStream把文档输出到一个文件中而已。注意一点,调用FileWriter.write()时,写的不是Document对象,而是根元素对象:writer.write(root);

创建一个新的xml文档时,可以使用DocumentBuilder的另一个方法是newDocument()。创建了一个新的文档,然后就可以创建其中一系列的节点,并联结起来,形成一个完整的文档输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值