xml xml约束 DTD dom解析

XML:

在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。例如:

XML是被设计用来存储数据、携带数据和交换数据的,他不是为了显示数据而设计的。

通过XML,我们可以在不兼容的系统之间交换数据。

XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系。

在一个软件系统中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定

例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最为合适不过。

一个XML文件分为如下几部分内容:

文档声明 元素属性注释  CDATA区 、特殊字符 处理指令(processing instruction)

Tip:XML语法-文档声明

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

最简单的声明语法:

      

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

        

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

      

常见错误:

1.

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

3.编码错误

XML文档乱码的原因

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

解决办法: 再保存的时候 点另存为 指定编码类型为UTF-8

                     或者使用eclipse 自动指定类型utf-8

Tip:元素 (1)

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

包含标签体:www.itcast.cn

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

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

              welcome to www.it315.org

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

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

第一段:

<网址>www.itcast.cn

第二段:

      

<网址>

       www.itcast.cn

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

元素命名规范

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

区分大小写,例如,

是两个不同的标记。

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

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

不能包含空格。

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

Tip:属性

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

             

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

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

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

             

                    text

             

Tip:注释

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

注意:

XML声明之前不能有注释

注释不能嵌套,例如:

      

       ……

       --> 

Tip:CDATA

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

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

原始内容输出 用cdata区

语法:

      

             

                    

             

       ]]>

Tip:转义字符

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

 

实例:

        中国

       

]]>

        <b1></b1>

       

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

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

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

Tip:处理指令

处理指令,简称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

      

              中国

              美国

      

      

      

              小日本

              英国

      

XML约束

Tip:XML约束概述

什么是XML约束

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

为什么需要XML约束

常用的约束技术

XML DTD

XML Schema

Tip:DTD约束快束入门

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

Dtd 要存为unicode或者utf-8

Tip:编程校验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

Tip:编写DTD约束的两种方式

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

Tip:在xml文件内编写DTD

      

      

      

      

      

]>

<书架>

       <书>

              <书名>Java就业培训教程

              <作者>张孝祥

              <售价>39.00元

      

       ...

Tip:引用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">

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

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

     

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

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

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

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


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

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

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

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

      

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

              +: 一次或多次 (书+)

             ?: 0次或一次 (书?)

               *: 0次或多次  (书*)

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

      

Tip属性定义

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

语法格式:

      

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

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

              ……

       >

属性声明举例:

       类别 CDATA #REQUIRED

       颜色 CDATA #IMPLIED

对应XML文件:

       <商品 类别="服装" 颜色="黄色">…

       <商品 类别="服装">…

Tip属性定义

XML编程(CRUD)增删改查

dom解析

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

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

Tip:JAXP

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

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

Tip:使用JAXP进行DOM解析

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

Tip:获得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");

 

Tip:DOM编程

DOM模型(document object model)

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

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

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

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

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

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

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

Tip: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)));

转载于:https://www.cnblogs.com/santry/archive/2011/04/24/2026267.html

你可能感兴趣的:(xml xml约束 DTD dom解析)