【JavaWeb】05 xml(一)语法和约束

本文详细介绍了XML的基本语法,包括文档声明、元素、属性、注释、特殊字符和CDATA区。此外,还讨论了XML的约束,如DTD和Schema,用于规范XML文档的结构。XML常用于数据存储、系统间数据交换和配置文件,其特点是可扩展性和灵活性。文中还提到了一些XML处理中的特殊字符转义和注释规则。
摘要由CSDN通过智能技术生成


表单提交方式(重要)
使用submit提交

<form>
<input type="submit" value="提交"/>
</form>

使用图片提交

<form>
<input type="image" src="图片路径"/>
</form>

使用button提交

<input type="button" onclick="form1()"/>
<script type="text/javascript">
function form1(){
	var form1=document.getElementById("form1")//获取form
	form1.action="提交到的页面";//设置提交地址
	form1.submit();}//提交
</script>
function form

使用超链接提交

//提交地址和内容都设置好
<a href="提交地址?key=value">超链接提交</a>

事件
onclick:鼠标点击事件
onchange:改变内容(一般和select一起使用)
onfocus:得到焦点
onblur:失去焦点

<input type="text" value="请输入" id="id1" onfocus="focus" onblur="blur">
<script type="text/javascript">
function focus(){
	var text1=document.getElementById("id1");
	text1.value="";
	}
function blur(){
	var text1=document.getElementById("id1");
	text1.value="请输入";
	}
</script>

xml简介

extensible markup languange 可扩展标记型语言
标记型:如html也是标记型语言。使用标签来操作。
可扩展:html标签是固定的,每个标签都有特定的含义。xml标签可以自己定义,可以是中文的标签。

用途:

  • html用于显示数据。xml也可以显示数据,但不是主要功能。
  • xml主要功能是存储数据。
    版本:主要使用1.0。1.1不能向下兼容。

应用:

  • 不同的系统之间传输数据,如qq消息的传输
//早期使用字符串
string str="qq1:qq2:hello";

//后来使用xml,这种方式利于系统维护
string str="
<message id="1">
	<sender>10000</sender>
	<getter>20000</getter>
	<content>hello</content>
</message>
"
  • 表示生活中有关系的数据
<北京市>
	<海淀区></海淀区>
	<朝阳区></朝阳区>
  • 用在配置文件中
    如在配置文件中保存用户名和密码,避免反复修改源代码

xml语法

xml文档声明

创建一个文件,后缀是.xml
第一步写文档声明,表示xml文件的内容

  • 格式:<?xml version="1.0" encoding="gbk"?>
    注意:必须写在第一行第一列
  • 属性:
    version 1.0 1.1
    encoding:xml编码 gbk utf-8 iso8859-1(不含中文)
    standalone:是否依赖于其他文件yes/no
  • 中文乱码问题:保存xml文件使用的码表和xml设置的码表(浏览器打开时使用)不一致。

定义元素(标签)

  • 有开始有结束:<mytag></mytag>
  • 标签没有内容,可以在标签内结束:<mytag/>
  • 可以嵌套,必须合理嵌套:
    <taga><tagb></tagb></taga>
    <taga><tagb></taga></tagb>×
  • 一个xml中只能有一个根标签,其他标签都是他下面的标签。
  • xml标签中所有的空格和换行都会被当成内容来解析。
  • 标签命名规则
    xml代码区分大小写
    不能以数字或下划线开头
    不能以xml、Xml、XML开头
    不能包含空格和冒号

定义属性

  • 属性定义的要求:
    一个标签可以有多个属性
    属性名称不能相同
    属性值使用单引号或双引号包起来
    命名规范与标签一致

注释

格式:<!--注释内容-->
注意:注释不能嵌套
注释也不能放第一行第一列

特殊字符

特殊字符需要转义:

<>"&
&lt;&gt;&quot;&apos;&amp;

CDATA区

可以解决多个字符都需要转义的操作
把这些内容都写到CDATA区中,就不需要转义了。
格式:<![CDATA[特殊字符串]]>
把特殊字符当做文本内容而不是标签直接显示。

PI指令(处理指令)

(使用较少)
可以在xml中设置样式。
格式:<?xml-stylesheet type="text/css" href="css文件路径"?>
注意:对中文命名的标签元素不起作用

xml的约束

为什么需要约束:虽然任意的标签都符合语法规范,但希望某文件中只保存一类信息,这时就规定xml中只能出现的元素。
约束技术:dtd和schema(了解)

dtd约束

创建一个文件,后缀.dtd

  1. 看xml中有多少个元素,有多少元素,在dtd文件中写几个<!ELEMENT>
  2. 判断元素是简单元素(没有子元素)还是复杂元素(有子元素)。
    • 简单元素:<!ELEMENT 元素名 (#PCDATA)>
    • 复杂元素:<!ELEMENT 元素名 (子元素)>
  3. 在xml中引入dtd文件。<!DOCTYPE 根元素名 SYSTEM "dtd文件路径">

浏览器只负责校验语法,不负责校验约束。想要校验xml约束,需要使用工具(如myeclipse)。

dtd的三种使用方式
1. 引入外部dtd文件(如上)
2. 使用内部dtd文件<!DOCTYPE 根元素名 [dtd代码]>
3. 使用外部的dtd文件(网络上的dtd文件)<!DOCTYPE 根元素名 PUBLIC "DTD名称" "DTD文档的url">

使用dtd定义元素

语法:<!ELEMENT 元素名 约束>

  • 简单元素
    (#PCDATA):文本字符串类型
    EMPTY:元素为空
    ANY:任意
  • 复杂元素
    子元素后面的符号:
    +:一次或多次
    ?:零次或一次
    *:零次或多次(任意次)
    子元素用,隔开,书写的顺序代表出现的顺序。如果用|隔开,代表只能出现其中任意一个子元素。

使用dtd定义属性

语法:
< !ATTLIST 元素名
   属性名 属性类型 属性约束
>

属性类型:

  1. CDATA:文本字符串
  2. 枚举:只能在一定范围内出现值,但每次只能出现其中一个。如:红绿灯。
<!ELEMENT person (#PCDATA)>
<!ATTLIST person
	ID1(male|female)
>//则person的ID1属性只能是这两种之一
  1. ID:值只能是字母或下划线开头

属性约束:

  1. #REQUIRED:该属性必须出现
  2. #IMPLIED:属性可有可无
  3. #FIXED:表示一个固定值
<!ATTLIST person
	ID1 CDATA #FIXED "aaa"
>//则person的ID1的值只能是aaa

直接值:在使用时不写属性则使用直接值,写了属性使用写的值。

<!ATTLIST person
	ID1 CDATA "www"
>//设置了直接值

实体
在dtd中定义,xml中使用
语法:<!ENTITY 实体名 "实体内容">
引用方式:&实体名;
注意:定义实体要写在内部dtd中,如果写在外部dtd中,某些浏览器下无法使用。

schema约束

与dtd约束的区别:

  • dtd语法:<!ELEMENT 元素名称 约束>
    schema符合xml的语法,xml语句
  • 一个xml中只能有一个dtd,但可以有多个schema,多个schema使用名称空间区分(类似于java包名)
  • dtd里面有PCDATA类型,但是在schema里面支持更多的数据类型。
  • schema语法更加复杂,目前不能替代dtd
  1. 创建一个文件,后缀.xsd
  2. 根节点是<schema>
    属性:
    • xmlns=“http://www.w3.org/2001/XMLSchema” 表示当前xml文件是一个约束文件(这里是固定的)
    • targetNamespace=“http://www.itcast.cn/2020420” 使用schema约束文件,直接通过这个地址引入约束文件
      targetNamespace相当于java头文件中的package,xmlns相当于import的内容。
    • elementFormDefault=“qualified”
  3. 看有多少个元素,写多少个<element></element>
  4. 看是简单还是复杂元素
  • 简单元素
<element name="name" type="string"></element>
  • 复杂元素:
<complexType>
	<sequence>
		子元素
	</sequence>
</complexType>

导入xml
写在根节点中:

//表示为一个schema约束的实例
//xsi是名称,用以区分各个schema约束(一个xml可以有多个xmlns) 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
//导入地址(targetNamespace)
xmlns="http://www.itcast.cn/2020420"
//前一个是targetNamespace,后一个是xsd文件路径
xsi:schemaLocation=<"http://www.itcast.cn/2020420" 1.xsd>

想要使用不同的约束,<约束名:标签>使用指定的约束。没有指定约束名的使用无约束名的约束(xmlns)

复杂元素指示器

(complexType下一级的标签)
<sequence>:元素出现的顺序
<all>:只能出现一次
<choice>:只能出现其中一个
maxOccurs="unbounded":元素出现的次数,为unbounded时无限制
<any></any>:表示任意元素

  • <attribute>:定义属性(必须是复杂元素)
    • name:属性名称
    • type:属性类型 int string
    • use:属性是否必须出现,required
      定义位置如下:
</sequence>
<attribute name="p1" type="string" use="required"></attribute>
</complexType>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值