二3 XML
Posted 随记zsjzhxc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二3 XML相关的知识,希望对你有一定的参考价值。
1. XML基本介绍
基本概念
XML即可扩展标记语言(Extensible Markup Language)
W3C
在1998年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本 !
特点:可扩展的, 标签都是自定义的 ;语法十分严格 。
XML的作用
功能 |
说明 |
存储数据 |
通常,我们在数据库中存储数据。不过,如果希望数据的可移植性更强,我们可以把数据存储 XML 文件中 |
配置文件 |
作为各种技术框架的配置文件使用 (最多) |
在网络中 传输 |
客户端可以使用XML格式向服务器端发送数据,服务器接收到xml格式数据,进行解析 |
2. XML的语法
XML文档声明格式
<?xml version="1.0" encoding="UTF-8"?>
//versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;
//encoding:指定当前文档的编码。可选属性,默认值是utf-8;
元素
Element 元素: 是XML文档中最重要的组成部分
1) XML 必须有且只有一个根元素,它是所有其他元素的父元素,比如以下实例中 users 就是根元素
2) 普通元素的结构开始标签、元素体、结束标签组成
4) 空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合
属性
1. 属性是元素的一部分,它必须出现在元素的
开始标签
中
2. 属性的定义格式:属性名=属性值,其中属性值必须使用
单引或双引
3. 一个元素可以有0~N个属性,但一个元素中
不能出现同名属性
4. 属性名
不能使用空格、冒号
等特殊字符,且
必须以字母开头
注释
XML的注释,以“ <!--”开始,以“--> ”结束。注释内容会被XML解析器忽略!
3. XML约束
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
DTD约束
DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。
<!ELEMENT students (student+) >
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">
...
Schema约束
1. Schema是新的XML文档约束,
比DTD强大
很多,是DTD 替代者;
2. Schema
本身也是XML文档
,但Schema文档的
扩展名为xsd
,而不是xml
3. Schema 功能更强大,内置多种简单和复杂的数据类型
4. Schema
支持命名
空间 (一个XML中
可以引入多个约束文档
)
4. XML解析
解析概述
当将数据存储在XML后,我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的IO知识是可以完成的,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。人们为不同问题提供不同的解析方式,并提交对应的解析器,方便开发人员操作XML。
XML解析方式
DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。
优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
XML常见的解析器
解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包
JAXP:
sun
公司提供的解析器,
支持DOM和SAX
两种思想
DOM4J
:一款非常优秀的解析器 , Dom4j是一个易用的、开源的库,用于
XML,XPath和XSLT
。它应用于Java平台,采用了Java集合框架并完全
支持DOM,SAX和JAXP
Jsoup
:jsoup 是一款Java 的
html解析器
,也可以解析XML
dom4j 的使用
使用核心类
SaxReader
加载xml文档获得
Document
,通过Document 对象获得文档的
根元素
,然后就可以操作了
SaxReader对象
read(…) 加载执行xml文档
Document对象
getRootElement() 获得根元素
elements(…) 获得指定名称的所有子元素。可以不指定名称
element(…) 获得指定名称的第一个子元素。可以不指定名称
attributeValue(…) 获得指定属性名的属性值
elementText(…) 获得指定名称子元素的文本值
xpath方式读取xml
XPath 是一门在 XML 文档中查找信息的语言。 可以是使用xpath查找xml中的内容。
由于DOM4J在解析XML时
只能一层一层
解析,所以当XML文件
层数过多
时使用会很
不方便
,
结合XPATH
就可以
直接获取到某个元素
需要再导入 jaxen-1.1-beta-6.jar
语法 |
说明 |
/AAA/DDD/BBB |
表示一层一层的,AAA下面 DDD下面的BBB |
//BBB |
表示和这个名称相同,表示只要名称是BBB,都得到 |
//* |
所有元素 |
BBB[1] , BBB[last()] |
第一种表示第一个BBB元素, 第二种表示最后一个BBB元素 |
//BBB[@id] |
表示只要BBB元素上面有id属性,都得到 |
//BBB[@id='b1'] |
表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1 |
electSingleNode(query) :查找和 XPath 查询匹配的一个节点
selectNodes(query) :
得到的是xml根节点下的所有满足 xpath 的节点
以上是关于二3 XML的主要内容,如果未能解决你的问题,请参考以下文章
需要示例代码片段帮助
从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration
在片段中添加 ListView
在 solr 3.4 中放置突出显示片段配置的位置
在扩充XML文件之后,不会调用onCreate()
创建片段而不从 java 代码实例化它