简介
XML是一种可扩展标记性语言,标签名可自定义。
用途:html主要用于显示数据,xml主要用于存储数据
xml的文档声明
<?xml version="1.0" encoding="gbk" ?> gbk\utf-8
xml中的空格和换行都会被当成内容解析,需注意代码格式
注释<!--代码-->
转义字符(包含分号)
字符 | 书写形式 |
---|---|
& | &分号 |
< | <分号 |
/> | >分号 |
" | "分号 |
’ | '分号 |
CDTAT区
<![CDATA[代码]]>
CDATA区中的代码不需要另外进行转义
PI指令可以设置xml样式
<?xml-stylesheet type="text/css" href="css的路径" ?>
xml的约束
dtd约束和schema约束
dtd文件
- 复杂标签元素<!ELEMENT 元素名(子元素)>
子元素可以用 | 或,隔开
符号“|”仅出现其中一个元素
符号“,”元素需按顺序出现 - 简单标签元素<!ELEMENT 元素名 (#PCDATA)>
代码 | 代表内容 |
---|---|
(#PCDATA) | 字符串类型 |
EMPTY | 空 |
ANY | 任意 |
元素多次出现,元素名后加符号
符号 | 出现次数 |
---|---|
+ | 一次或多次 |
? | 零次或一次 |
* | 零次或多次 |
xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">
<!DOCTYPE 根元素名称 [dtd代码] >
<!DOCTYPE 根元素名称 PUBLIC "dtd名称" "dtd文档的url">
约束属性
语法<!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
属性类型
CDATA--------字符串
枚举-------------(aa|bb|cc)
属性约束
- #REQUIRED:属性必须存在
- #IMPLIED:属性可有可无
- #FIXED:属性的值为固定
- 直接值:有这个属性就是这个值,没这个属性
实体的定义
语法<!ENTITY 实体名称 “实体的值”>
举例:
<!ENTITY TEST "HAHAH">
使用实体 &实体名称; &TEST
schema约束
符合xml语法,一个xml中可以有多个schema,schema支持更多的数据类型。
<element name="根节点">
<complexType>
<sequence>
<element name="" type="" ></element>
<element name="" type="" ></element>
</sequence>
</complexType>
</element>
xml的解析
dom和sax解析
- dom在内存中分配树形结构,每部分都封装成对象,
优点:方便增删改操作
缺点:文件过大时,会造成内存溢出 - sax采用事件驱动,边读边解析,不会造成内存溢出
优点:不会造成内存溢出
缺点:不能实现增删改操作
使用jaxp实现查询节点操作
//创建解析器工厂
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//通过解析器工厂创建解析器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//解析器解析目标xml文件
Document document = documentBuilder.parse("src/1.xml");
//document文件获取标签为na