XML和dom4j

0.xml文件的约束

常见的包括dtd和schema约束

1.dtd的创建

DTD(Document Type Definition),全称为文档类型定义。用于约束xml文件。

步骤:
(1)xml有几个元素,在dtd文件中就写几个 <!ELEMENT>语句
(2)判断元素是简单元素还是复杂元素
- 复杂元素:有子元素的元素 <!ELEMENT 元素名称 (子元素)>
- 简单元素:没有子元素 <!ELEMENT 元素名称 (#PCDATA)>
(3)需要在xml文件中引入dtd文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person SYSTEM "1.dtd">
<person>
	<name>zhangsan</name>
	<age>20</age>
	<a>1111</a>
</person>

1.dtd:

<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

2.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">
例如:

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

3.dom和sax解析xml区别:

  • dom方式解析
    根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象
    缺点:如果文件过大,造成内存溢出
    优点:很方便实现增删改操作

  • sax方式解析
    采用事件驱动,边读边解析
    从上到下,一行一行的解析,解析到某一个对象,返回对象名称
    缺点:不能实现增删改操作
    优点:如果文件过大,不会造成内存溢出,方便实现查询操作

4.schema和dtd约束xml的区别

(1)schema符合xml的语法,使用xml语句。
(2) 一个xml中可以有多个schema,多个schema使用名称空间区分(类似于java包名),而dtd文件只能引入一个
(3)dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型。比如 年龄 只能是整数,在schema可以直接定义一个整数类型
(4)schema语法更加复杂,但是schema目前不能替代dtd,dtd很简单

5.xml引入schema

在这里插入图片描述

6.sax的解析过程

在这里插入图片描述

7.dom4j支持xpath的操作

可以直接获取到某个元素

  • 第一种形式:指定全路径
    /AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB
  • 第二种形式:指定名称
    //BBB: 表示和这个名称相同,表示只要名称是BBB,都得到
  • 第三种形式:所有
    /*: 所有元素
  • 第四种形式:指定名称和索引
    BBB[1]: 表示第一个BBB元素
    BBB[last()]:表示最后一个BBB元素
  • 第五种形式:指定名称和id
    //BBB[@id]: 表示只要BBB元素上面有id属性,都得到
  • 第六种形式:指定名称和具体id
    //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1

dom4j里面提供了两个方法,用来支持xpath

selectNodes("xpath表达式"):获取多个节点
selectSingleNode("xpath表达式"):获取一个节点
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章