学习目标:
1.能够说出XML的作用
1)XML :可扩展标记语言(EXtensible?Markup?Language),html是其一种.
2)xml最常作为配置文件使用
3)XML 与 HTML 的主要差异
- xml标签都是自定义的,html标签是预定义。
- xml的语法严格,html语法松散。
- xml是存储数据的,html是展示数据。
2.了解XML的组成元素
(1).文档声明必须为
;
(2).文档声明必须从文档的0行0列位置开始;
(3).文档声明只有2个属性:
- versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;
- encoding:指定当前文档的编码。可选属性,默认值是utf-8;
2)元素 element:
(1)开始标签/元素体/结束标签/
(2)空元素:
(3)元素命名:区分大小写,不能使用空格和冒号,不以xml开头
(4)格式化良好的xml文档,必须只有一个根元素.
3)属性 attribute
4)注释:
5)转义字符: 因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符
< > ” ’ &
< > " ' &
3.能够说出有哪些XML约束技术
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。常见的xml约束:DTD、Schema
1) DTD 约束(Document Type Definition)
文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。
常见框架使用DTD约束有:struts2、hibernate等
注意:
模拟spring规范,如果开发人员需要在xml使用当前DTD约束“bean.dtd”,必须包括DOCTYPE。
格式:
2) Schema 约束(扩展名为xsd,比DTD强大,数据类型更完善,支持名称空间)
(1)名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元素和属性都有自己的名称空间,那么就不会出现名字冲突问题
(2)约束文档和xml关系:
当W3C提出Schema约束规范时,就提供“官方约束文档”。
我们通过官方文档,必须“自定义schema 约束文档”,开发中“自定义文档”由框架编写者提供。
我们提供“自定义文档”限定,编写出自己的xml文档。
(3)声明命名空间:
4.1常见的解析方式
1)DOM:要求解析器把整个xml文档装在到内存,并解析成一个Document对象
优点:元素与元素之间保留结构关系,故可以进行增删改查操作;
缺点:xml文档过大,可能出现内存溢出显现.
2)SAX:逐行扫描文档,一边扫描一边解析;并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件.
优点:处理速度快,可以处理大文件;
缺点:只能读,逐行后将释放资源.
3)PULL: Android 内置的xml解析方式,类似SAX
4.2常见的解析器:
解析器:就是根据不同的解析方式提供的具体实现.
有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包.
常见的解析开发包:
JAXP: sun公司提供支持DOM和SAX开发包;
JDom: dom4j兄弟;
jsoup: 一种处理html特定解析开发包;
dom4j: 比较常用的解析开发包, hibernate 底层采用.
4.能够说出解析XML文档DOM方式原理
XML DOM 将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作;
文档: Document
元素: Element
属性: Attribute
文本: Test
DOM中的核心概念就是节点,在XML文档中的元素、属性、文本等,在DOM中都是节点!
5.能够通过Dom4j解析XML文档(先导入dom4j-**.jar包)
dom4j 必须使用核心类 SaxReader 加载 xml 文档获得 Document ,通过Document 对象获得文档的根元素,然后就可以操作了:
常用API如下:
1) SaxReader对象
read(…) 加载执行xml文档
2) Document对象
getRootElement() 获得根元素
3) Element对象
elements(…) 获得指定名称的所有子元素。可以不指定名称
element(…) 获得指定名称第一个子元素。可以不指定名称
getName() 获得当前元素的元素名
attributeValue(…) 获得指定属性名的属性值
elementText(…) 获得指定名称子元素的文本值
getText() 获得当前元素的文本内容
DOM4J解析xml文档步骤:
1) 获得SaxReader对象: SaxReader sax = new SaxReader();
2) 加载xml文档获得Document对象: Document doc = sax.read("beans.xml");
3) 通过Document对象,获得文档的根元素: Element eleRoot = doc.getRootElement();
4) 通过根元素,可获取所有元素/属性/文本 等内容;
6.能够使用xpath解析XML文档
1)引入原因:由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素.
2)jar包:默认的情况下,dom4j不支持xpath,如果想要在dom4j里面使用xpath,需要引入支持xpath的jar包 jaxen-1.1.6.jar;
3)在dom4j里面提供了Document对象的两个方法,用来支持xpath
List selectNodes(“xpath表达式”),用来获取多个节点
Node selectSingleNode(“xpath表达式”),用来获取一个节点
4)xpath表达式常用查询形式:
(1) /AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB
(2) //BBB: 表示和这个名称相同,表示只要名称是BBB 都得到
(3) /*: 所有元素*/
(4.1) //BBB[index]:表示第一个BBB元素
(4.2) /BBB[last()]:表示此层级下最后一个BBB元素
(5) //BBB[@id]: 表示只要BBB元素上面有id属性 都得到
(6) //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1
7.通过类反射获取要解析的xml文档(xml文档放在项目-moudle-src目录下)
若是此文件移植到别的计算机,路径将变化,此时用以下方式:(保证xml文档放在项目-moudle-src目录下):
InputStream resourceAsStream = Test01.class.getClassLoader().getResourceAsStream(“students.xml”);
Document doc = saxReader.read(resourceAsStream);