什么是DTD约束:
DTD(Document Type Definition)文档类型定义,用来约束xml文档。
规定xml文档中元素的名称,子元素的名称及顺序,元素的属性等等。
1. 什么是格式良好XML
1.1 有且只有一个根元素
1.2 XML标签大小写正确区分
1.3 正确使用结束标签
1.4 正确嵌套标签
1.5 使用了合法的标签名
1.6 定义有效的属性
这是一个完整的XML
<persons>
<person>
<name>张小明</name>
<age>10</age>
<contact>
<phone>1234567</phone>
</contact>
<br/>
</person>
<person >
<name>张大明</name>
<age>35</age>
<contact>
<email>123@qq.com</email>
</contact>
</person>
</persons>
2、创建一个以.dtd为文件后缀名的文件。
2.2 步骤:
看xml中有多少元素,有多少元素就 写几个<!ELEMENT>
判断元素是简单元素还是复杂元素。
简单元素:没有子元素的元素。<!ELEMENT 元素名称 (子元素) 复杂元素:拥有子元素的元素。<!ELEMENT 元素名称 (#PCDATA)>
3、关于使用dtd定义元素:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE person[
<!-- 复杂元素 -->
<!--
<!ELEMENT person (name,age,sex)>:子元素只能出现一次
表示子元素可以出现的次数:
+:表示只能出现一次或者多次
?:表示零次或者一次
*:表示出现任意次
<!ELEMENT person (name+,age?,sex*)>
子元素列表以逗号隔开,表示出现的顺序子元素用|隔开,
表示只能出现一个
-->
<!ELEMENT person (name+,age?,sex*,census)>
<!--//简单元素-->
!ELEMENT name (#PCDATA)><!--//(#PCDATA)表示name是字符串类型-->
<!ELEMENT age EMPTY><!--//EMPTY表示age约束为空,不能有值-->
<!ELEMENT sex ANY><!--//ANY表示任意,可有值,可无值-->
<!ELEMENT census (side|country)>
<!ELEMENT side (#PCDATA)>
<!ELEMENT country (#PCDATA)>
]>
<person>
<name>小辣椒</name>
<name>小李子</name>
<age>17</age>
<sex>女</sex>
<sex>女</sex>
<sex>女</sex>
<census>
<side>地球村</side>
<!-- <country>太阳系</country> //side和country只能出现一个 -->
</census>
</person>
4. 使用DTD定义属性:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons[
<!ELEMENT persons (person+)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phon (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT br EMPTY>
<!ATTLIST person
pid ID #REQUIRED
sex (男|女) "男"
qq CDATA #IMPLIED
parent IDREF #IMPLIED
>
]>
<persons>
<person pid="p1" sex="男" qq="aaa" parent="p2">
<name>张小明</name>
<age>10</age>
<contact>
<phone>1234567</phone>
</contact>
<br/>
</person>
<person pid="p2">
<name>张大明</name>
<age>35</age>
<contact>
<email>123@qq.com</email>
</contact>
</person>
</persons>
对应的xml文件:
5.DTD对config.xml限制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[
<!ELEMENT config (action+)>
<!ELEMENT action (forward+)>
<!ELEMENT forward EMPTY>
<!ATTLIST action
path CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ATTLIST forward
name CDATA #REQUIRED
path CDATA #REQUIRED
redirect (false|true) "false"
>
]>
<config>
<!--
action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径
type:字符串,非空,子控制器的完整类名
-->
<action path="/registerAction" type="test.action.RegisterAction">
<forward name="success" path="/index.jsp" redirect="true" />
<forward name="failed" path="/register.jsp" redirect="false" />
</action>
<action path="/registerAction" type="test.action.RegisterAction">
<forward name="success" path="/index.jsp" redirect="true" />
<forward name="failed" path="/register.jsp" redirect="false" />
</action>
6. 元素的分类
<!ELEMENT element-name EMPTY>//空元素 <!ELEMENT element-name (#PCDATA)>//文本元素 <!ELEMENT element-name (e1,e2)>//混合元素7. XML中的特殊符号
8. 我们学习XML中DTD的约束有什么作用勒?
DTD文件对当前XML文档中的节点进行了定义,这样我们加载配置文件之前,可通过指定的DTD对当前XML中的节点进行检查,确定XML结构和数据类型是否合法。
9. Schema约束xml
9.1、xml Schema介绍
Schema它也来约束xml文件的,DTD在约束xml的时候一个xml中只能引入一个DTD,同时DTD它无法对属性以及标签中的数据做数据类型的限定。
Schema它是用来代替DTD来约束xml。
Schema文件本身就是使用xml文件书写的,同时它对需要约束的xml中的数据有严格的限定。学习Schema主要来学习W3C组织定义的如何在Schema中去约束xml的标签以及属性,还有属性的数据类型,以及标签中子标签的顺序。
要定义一个Schema文件,这时它的扩展名必须是.xsd。在这个文件中根元素必须是schema。
使用Schema来约束xml,Schema在书写的时候,只需要使用W3C组织提前定义的限定标签的,以及限
9.2、Schema快速入门
第一步:书写xml文件
第二步:定义schema文件
在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束。而这个约束是W3C组织提前定义好的,
在Schema文件中需要提前引入进来在根标签中使用属性进行进入:
<schema xmlns=“http://www.w3.org/2001/XMLSchema” 引入W3C定义的schema书写的规范
targetNamespace=“http://www.itcast.org/book” 给当前的Schema文件起名字(命名空间)
作用是当哪个xml要引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入
第三步:在xml文件中引入当前的这个Schema
9.3、Schema的名称空间
9.4、Schema中的标签解释
Name.xsd
Book2.xml
10.2、DOM解析
Xml文档的属性结构
10.3、DOM获取节点、属性、文本数据
10.4、修改xml中的数据
当要把修改后的xml中的数据保存到xml中需要使用Transformer 类中的transform方法
TransformerFactory这个工厂负责生产一个把dom树写到文件中的对象
Transformer 负责把一个dom写到文件中。
总结:
Java提供的dom操作方式:
第一步:需要获取到相应的工厂
第二步:根据工厂获取相应的工具或者解析器对象
第三步:根据解析器获取dom对象,再操作dom树中的节点,或者是获取到相应的工具,然后使用工具对dom树进行保存等操作