一、什么是xml?
可扩展标记语言(EXtensible Markup Language)。
-也可以使用标签来操作
可扩展
-标签可以自己定义,可以写中文的标签。<person></person>
xml用途
-html用于显示数据,xml也可以显示数据(不是主要功能)
-xml主要功能,为了存储数据
xml是W3C组织发布的技术,有两个版本,目前使用的都是1.0版本,因为1.1版本不能向下兼容。
**xml的应用
不同的系统之间传输数据
用来表示生活中有关系的数据
经常用在配置文件
*比如连接数据库,将数据库的用户名和密码,数据名称存储在配置文件中。
如果需要修改数据库的信息,不需要修改源代码,只要修改配置文件就可以了
二、xml语法
1.xml的文档声明(***)
*创建一个文件 后缀名是 .xml
*如果写xml,第一步必须要有一个文档声明,必须要写在第一行,第一列
<?xml verson="1.0" encoding="gbk"?>
*属性
-version:xml的版本
-encoding:xml的编码 gbk utf-8 iso8895-1(不包含中文)
*乱码问题
2.定义元素(标签)(***)
*标签有开始,必须有结束:<person></person>
*标签没有内容,可以在标签内结束 <aa/>
*标签可以嵌套,必须合理嵌套
*一个xml中,只能有一个根标签,其他标签都是这个标签下面的标签。
*对于xml标签中出现的所有空格和换行,xml解析程序都会当做标签内容进行处理
下面的代码含义是不一样的
<aa>11111</aa>
<aa>
11111
</aa>
*****xml中标签的命名规则
区分大小写;不能以数字和下划线开头;不能以xml开头;不能包含空格;名称中间不能包含冒号
3.定义属性***
*****xml中属性的定义
一个标签上可以有多个属性
<person id1="aaa" id2="bbb"></person>
属性名称不能相同
属性使用引号包起来(可以是单引,可以使双引)
属性的名称规范和元素的名称规范一致
4.注释*** <!-- -->
5.特殊字符***
6.CDATA区*
可以解决多个字符都需要转义的操作if(a<b&&b<c)
把这些内容方到CDATA区里面,不需要转义
写法:
<![CDATA[内容]]>
7.PI指令 *(用处不大,了解即可)
可以在xml中设置样式
<?xml-stylesheet type="text/css" href="1.css"?> 但对中文标签元素不起作用
三、xml的约束
xml的约束技术:dt的约束和schema约束
1.dtd约束
*创建一个文件 后缀名.dtd
步骤:
(1)看xml中有多少个元素,有几个元素,在dtd文件中写几个<!ELEMENT>
(2)判断元素是简单元素还是复杂元素
-简单元素:没有子元素
<!ELEMENT 元素名称(#PCDATA)>
-复杂元素:有子元素的元素
<!ELEMENT 元素名称(子元素)>
(3)需要在xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
打开xml文件使用浏览器打开,浏览器只负责校验xml的语法,不负责校验约束
如果想校验xml约束,需要使用工具(myeclipse)
还有其他两种dtd文件引入方式:xml内部引入,外部的dtd文件(网络上)引入
*使用内部的dtd文件
<!DOCTYPE 根元素名称[
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT name (#PCDATA)>
]>
*使用外部
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
-struct2使用配置文件中的外部dtd
2.dtd定义属性
*语法 <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
属性类型:CDATA:普通文本字符串
ENUMERATED:枚举 (aa|bb|cc),每次只能出现其中的一个
ID 属性的取值不能重复,属性的值只能由字母,下划线开始,不能出现空白字符
属性约束: #REQUIRED:表示该属性必须出现
#IMPLIED:表示属性可有可无
#FIXED:表示属性的取值为一个固定值
直接值:默认的值
3.schema约束
schema符合xml的语法,xml语句
一个xml中可以有多个schema,多个schema 使用名称空间区分
***dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型
(1)
创建一个schema文件,后缀名.xsd,yige XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema
四、xml的解析
*xml是标记型文档
*js使用dom解析标记型文档
-根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象
-document对象、element对象、属性对象、文本对象、Node节点对象
*xml解析方式:dom和sax
想要解析xml,首先需要解析器
*不同的公司和组织提供了 针对dom和sax方式的解析器,通过api方式提供
*sun公司提供了针对dom和sax解析器 jaxp
*dom4j组织,针对dom和sax解析器 dom4j(实际开发中使用最多)
*jdom组织,针对dom和sax解析器 jdom
1.JAXP:是JavaSE的一部分。
javax.xml.parsers包中,定义了几个工厂类,我们可以通过调用这些工厂类,得到对XML文档进行解析的DOM
和SAX解析器对象 DocumentDuilderFactory SAXParserFactory
使用dom操作xml
创建解析器工厂;根据解析器工厂创建解析器;解析xml返回Document;之后的操作类似于js
***如果进行删除和修改操作需要进行使用Transformer类进行回写