一、xml的作用
xml有两个作用,分别是:①数据交互 ②做配置
二,标准的xml格式
(1)有且只有一个根元素
错误演示:
注意:在出现两个根元素时,代码会出现报错
(2)xml标签大小写正确区分
错误演示:
注意:当前后代码的字母大小写不一致,会出现报错
(3)正确使用结束标签
(4)正确嵌套标签
错误演示:
注意:当根标签嵌套错误或者结束标签使用不正确,也会出现报错
(5)使用了合法的标签名
(6)定义有效的属性
注意:在代码中不能使用无效标签名,例如用“?”符号来当做标签,也会出现错误
三,在xml加入dtd声明
在xml中加入dtd声明需要用: !DOCTYPE root[]
注意
:
在加入声明时,要用<>括号括起来,所有的约束都在中括号中写,root为根元素
四,元素分类
<!ELEMENT element-name EMPTY > ——–空元素
<!ELEMENT element-name (#PCDATA) > ——–文本元素
<!ELEMENT element-name (e1,e2) > ——–混合元素
五,元素的限制
(,)与 (|)非
次数:
0或1:?
0-N:*
1-N:+
在建立xml约束时:首先分析xml结构
步骤:
1.根标签person
2.person有子标签 混合标签(有子标签)
3.person有子标签:name age content br 混合标签(有子标签)
4.name,age没有子标签但有内容 文本标签
5.contact有子标签
6.phone没有子标签 有内容 文本标签
7.br既没有子标签也没有内容 空标签
8.email没有子标签 有内容 文本便签
案例
<?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 phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT br EMPTY>
]>
<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>
在建立约束代码后,就需要按照约束条件来
效果图
六,属性定义
(1) 语法:<!ATTLIST element-name att-name type decs>
(2) 属性类型type:
ID 唯一标识
(男|女) 选择类
CDATA 字符串类(文本类)
IDREF 另一元素的id
reference
(3)属性描述
#REQUIRED 必填
#IMPLIED 非必要
‘默认值’ 注意:只有type为男女类型是,decs才可以用默认的方式
案例1:
pid代表唯一 ID
sex代表 选择类
qq 文本类
parent 依赖类(idref)reference
<?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 phone (#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>
效果图:
此时我们可以看见,sex属性只能为男或者女(默认为男)也不能为空,如果在填写了其他内容后,会出现错误提示
案例2:
<?xml version="1.0" encoding="UTF-8"?>
要求://config标签:可以包含0~N个action标签
<!-- 标签的约束 -->
<!DOCTYPE config [
<!ELEMENT config (action+)>
<!ELEMENT action (forward+)>
要求:// action标签:可以饱含0~N个forward标签
<!-- 属性约束 -->
<!ATTLIST action
path CDATA #REQUIRED
要求:// type:字符串,非空,子控制器的完整类名
type CDATA #REQUIRED
>
<!ATTLIST forward
name CDATA #REQUIRED
path CDATA #REQUIRED
redirect CDATA #REQUIRED
>
]>
<action path="/registerAction2" type="test.action.RegisterAction">
<forward name="success" path="/index.jsp" redirect="true" />
<forward name="failed" path="/register.jsp" redirect="false" />
</action>
<action path="/loginAction" type="test.action.LoginAction">
<forward name="a" path="/index.jsp" redirect="false" />
<forward name="b" path="/welcome.jsp" redirect="true" />
</action>
</config>
当违反约束时:
案例3
<?xml version="1.0" encoding="UTF-8"?>
<!-- 标签的约束 -->
<!DOCTYPE web-app [
<!ELEMENT web-app (servlet,servlet-mapping)*>
<!ELEMENT servlet (servlet-name,servlet-class)>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT servlet-mapping (servlet-name,url-pattern+)>
<!ELEMENT url-pattern (#PCDATA)>
]>
<web-app>
<servlet>
<servlet-name>jrebelServlet</servlet-name>
<servlet-class>com.zking.xml.JrebelServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jrebelServlet</servlet-name>
<url-pattern>/jrebelServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>jrebelServlet2</servlet-name>
<servlet-class>com.zking.xml.JrebelServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jrebelServlet2</servlet-name>
<url-pattern>/jrebelServlet2</url-pattern>
<url-pattern>/jrebelServlet3</url-pattern>
</servlet-mapping>
</web-app>
这时web里面含有的子便签数量都不少于一个
如图所示:
所以在写约束的时候需要注意正确的格式(正确格式如下)
在违反约束时: