Java DTD dom解析受XML的约束

  作者:bea

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

一、XML语法:文档说明

在编写XML文档时,需要先使用文档声明,声明XML文档的类型。

最简单的声明语法:

用encoding属性说明文档的字符编码:

用standalone属性说明文档是否独立:

常见错误:

1.

2. 注意空格问题(全角半角中文还是英文的空格) IE打开 try

3.编码错误

XML文档乱码的原因

保存的时候先保存到硬盘上 硬盘上没有中国 通过gb2312编码 可能编出来98 99 再用IE浏览器显示的时候 按照UTF-8来解析的时候 98 99就成了乱码了

解决办法: 再保存的时候 点另存为 指定编码类型为UTF-8或者使用eclipse 自动指定类型utf-8

二、XML元素

XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:

包含标签体:www.itcast.cn

不含标签体的:, 简写为:

一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套 ,例如:

welcome to www.it315.org

格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。

对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。

第一段:

www.xinge360.com

第二段:


www.xinge360.com

由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。

三、元素命名规范

一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:

区分大小写,例如,和

是两个不同的标记。

不能以数字或"_" (下划线)开头。

不能以xml(或XML、或Xml 等)开头。

不能包含空格。

名称中间不能包含冒号(:)。

四、XML属性

一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:

属性值一定要用双引号(")或单引号(')引起来

定义属性必须遵循与标签相同的命名规范

多学一招:在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:

text

五、XML的注释

Xml文件中的注释采用:“” 格式。

注意:

XML声明之前不能有注释

注释不能嵌套,例如:

六、CDATA区

在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。

遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。

原始内容输出 用cdata区

语法:


]]>

七、转义字符

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。

实例:

<b1></b1>

cdata和转义字符的区别: 对程序有区别

程序读的时候 一个读原始数据 一个读转义字符

给人看就转义 给程序原始样式用cdata

八、处理指令

处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。

例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。

处理指令必须以“”作为结尾,XML声明语句就是最常见的一种处理指令。

实例程序:

Config.css

#a1{

font-size:300px;

color:red;

}

#a2{离线应用

font-size:100px;

color:green;

}

#b1{

font-size:20px;

}

#b2{

font-size:200px;

color:blue;

}

Config1.xml

DTD dom解析

XML约束



DTD dom解析

XML约束

XML约束

Java DTD dom解析,XML约束概述

什么是XML约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

为什么需要XML约束

常用的约束技术

XML DTD

XML Schema

DTD约束快束入门

DTD(Document Type Definition),全称为文档类型定义。

Dtd 要存为unicode或者utf-8

编程校验XML文档正确性

IE5以上浏览器内置了XML解析工具:Microsort.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。

创建xml文档解析器对象

var xmldoc = new ActiveXObject("Microsoft.XMLDOM");

开启xml校验

xmldoc.validateOnParse = "true";

装载xml文档

xmldoc.load("book.xml");

获取错误信息

xmldoc.parseError.reason;

xmldoc.parseError.line

编写DTD约束的两种方式

DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。

在xml文件内编写DTD

]>

信鸽网_Java DTD dom解析XML约束

信鸽网

39.00元

...

引用DTD约束

XML文件使用 DOCTYPE6声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:

当引用的文件在本地时,采用如下方式:

例如: 。在xml文件中手写一下。

当引用的文件是一个公共的文件时,采用如下方式:

例如:

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

DTD 的语法细节:元素定义1

在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:

元素类型可以是元素内容、或类型

如为元素内容:则需要使用()括起来,如

如为元素类型,则直接书写,DTD规范定义了如下几种类型:

EMPTY:用于定义空元素,例如

ANY:表示元素内容为任意类型。

元素内容中可以使用如下方式,描述内容的组成关系

用逗号分隔,表示内容的出现顺序必须与声明时一致。

用|分隔,表示任选其一,即多个只能出现一个

在元素内容中也可以使用+、*、?等符号表示元素出现的次数:

+: 一次或多次 (书+)

?: 0次或一次 (书?)

*: 0次或多次 (书*)

也可使用圆括号( )批量设置,例

属性定义

xml文档中的标签属性需通过ATTLIST为其设置属性

语法格式:

属性名1 属性值类型 设置说明

属性名2 属性值类型 设置说明

……

>

属性声明举例:

对应XML文件:

属性定义

XML编程(CRUD)增删改查

dom解析

dom 全部装载到内存一下子解析 有内存的压力 适合增删改查

sax 执行一步解析一步 只适合读

JAXP

JAXP 开发包是J2SE的一部分,它由javax.xml、org.w 3c .dom 、org.xml.sax 包及其子包组成

在 javax.xml.parsers 包中,定义了几个工厂类,程序员调用这些工厂类,可以得到对xml文档进行解析的 DOM 或 SAX 的解析器对象。

使用JAXP进行DOM解析

javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 , DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。

获得JAXP中的DOM解析器

调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。

调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。

调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。

//创建解析工厂

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//得到解析器

DocumentBuilder builder = factory.newDocumentBuilder();

System.out.println(builder);

//解析xml文档

Document d = (Document) builder.parse("src/book.xml");

DOM编程

DOM模型(document object model)

DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。

在dom中,节点之间关系如下:

位于一个节点之上的节点是该节点的父节点(parent)

一个节点之下的节点是该节点的子节点(children)

同一层次,具有相同父节点的节点是兄弟节点(sibling)

一个节点的下一个层次的节点集合是节点后代(descendant)

父、祖父节点及所有位于节点上面的,都是节点的祖先(ancestor)

Node对象

Node对象提供了一系列常量来代表结点的类型,当开发人员获得某个Node类型后,就可以把Node节点转换成相应的节点对象(Node的子类对象),以便于调用其特有的方法。(查看API文档)

Node对象提供了相应的方法去获得它的父结点或子结点。编程人员通过这些方法就可以读取整个XML文档的内容、或添加、修改、删除XML文档的内容了。

更新XML文档

javax.xml.transform包中的Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出,例如把xml文件应用样式表后转成一个html文档。利用这个对象,当然也可以把Document对象又重新写入到一个XML文件中。

Transformer类通过transform方法完成转换操作,该方法接收一个源和一个目的地。我们可以通过:

javax.xml.transform.dom.DOMSource类来关联要转换的document对象,

用javax.xml.transform.stream.StreamResult 对象来表示数据的目的地。

Transformer对象通过TransformerFactory获得

l

TransformerFactory factory = TransformerFactory.newInstance();

Transformer tf = factory.newTransformer();

tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream(filename)));

if ($ != jQuery) { $ = jQuery.noConflict();}var isLogined = true;var cb_blogId = 87849;var cb_entryId = 2026267;var cb_blogApp = "santry";var cb_blogUserGuid = "dec1d802-f36b-e011-a53f-842b2b196315";var cb_entryCreatedDate = '2011/4/24 16:05:00'; 有用  |  无用

猜你喜欢