文章目录
xml简介
对比HTML语言:
xml基本语法
文档语法
xml元素
xml属性
xml注释
xml特殊字符
xml-CDATA
<![CDATA[ 内容 ]]>
PI指令:引入CSS样式
写法: <?xml-stylesheet type="text/css" href="css的路径"?>
xml的约束
dtd约束
dtd的快速入门
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person SYSTEM "1.dtd">
<person>
<name>zhangsan</name>
<age>20</age>
<a>1111</a>
</person>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
约束报错:
dtd的三种引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
(2)使用内部的dtd文件
<!DOCTYPE 根元素名称
[
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]
>
(3)使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
框架 struts2 使用配置文件 使用 外部的dtd文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
dtd定义元素
dtd定义属性
dtd定义实体
schema约束
schema约束特点:
- schema符合xml的语法,xml语句
- 一个xml中可以有多个schema,多个schema使用名称空间区分(类似于java包名)
- dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型
比如 年龄 只能是整数,在schema可以直接定义一个整数类型 - schema语法更加复杂,schema目前不能替代dtd
schema的快速入门
创建一个schema文件 后缀名是 .xsd
根节点 <schema>
在schema文件里面
** 属性 xmlns="http://www.w3.org/2001/XMLSchema"
- 表示当前xml文件是一个 约束文件 (schema文件为约束文件,xml为被约束文件)
** targetNamespace="http://www.itcast.cn/20151111"
- 使用schema约束文件,被约束文件通过这个地址引入约束文件
** elementFormDefault="qualified"
-
步骤
(1)看xml中有多少个元素
<element>
(2)看简单元素和复杂元素
* 如果复杂元素
<complexType>
<sequence>
子元素
</sequence>
</complexType>
(3)简单元素
写在复杂元素的<sequence>中
<element name="person">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
另外 <any></any>:表示任意元素
(4)在被约束文件里面引入 约束文件
<根标签 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/20151111"
xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
** xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-- 表示xml是一个 被约束文件 :xsi为xmlns下的xsi别名
** xmlns="http://www.itcast.cn/20151111"
-- 使用的约束文件的命名空间为 "http://www.itcast.cn/20151111"
** xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
-- 命名空间 空格 约束文档的地址路径
* 简单元素位于的标签含义
<sequence>:表示元素的出现的顺序
<all>: 元素只能出现一次
<choice>:元素只能出现其中的一个
标签属性
简单元素属性
maxOccurs="unbounded": 表示元素的出现的次数 unbounded无限次
复杂元素属性
可以约束属性
* 写在复杂元素里面
***写在 </complexType>之前
<attribute name="id1" type="int" use="required"></attribute>
- name: 属性名称
- type:属性类型 int stirng
- use:属性是否必须出现 required
* 复杂的schema约束
<company xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 指明是被约束文件
xmlns = "http://www.example.org/company" 引入第一个schema文件
xmlns:dept="http://www.example.org/department" 引入第二个schema文件
xsi:schemaLocation= "http://www.example.org/company company.xsd
http://www.example.org/department department.xsd"
schema文件路径
>
* 引入多个schema文件,可以给每个起一个别名
<employee age="30">
<!-- 部门名称 -->
<dept:name>100</dept:name>
* 想要引入department约束文件里面的name,使用部门的别名 detp:元素名称
<!-- 员工名称 -->
<name>王晓晓</name>
* 不加:的标签,默认使用没有别名的xmlns (company)
</employee>
举例
schema文件 : 1.xsd
xml文件 :1.xml — 不符合约束,报错
xml的解析简介 (通过JAVA操作xml文件)
xml的解析方式(技术):dom 和 sax
dom解析和sax解析区别:
-
dom方式解析
- 根据xml的层级结构在内存中分配一个树形结构,
- 把xml的标签,属性和文本都封装成对象
- 缺点:如果文件过大,造成内存溢出
- 优点:很方便实现增删改操作
-
sax方式解析
- 采用事件驱动,边读边解析
- 从上到下,一行一行的解析,解析到某一个对象,返回对象名称
- 缺点:不能实现增删改操作
- 优点:如果文件过大,不会造成内存溢出,方便实现查询操作
想要解析xml,首先需要解析器
不同的公司和组织提供了 针对dom和sax方式的解析器,通过api方式提供
- sun公司提供了针对dom和sax解析器 jaxp (javase)
- dom4j组织,针对dom和sax解析器 dom4j (最多使用)
- jdom组织,针对dom和sax解析器 jdom (基本没人用)