二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. 不能使用空格,不能使用冒号
2. xml 标签名称 区分大小写
3. XML 必须有且 只有一个根元素
语法格式:
1) XML 必须有且只有一个根元素,它是所有其他元素的父元素,比如以下实例中 users 就是根元素
2) 普通元素的结构开始标签、元素体、结束标签组成
3) 元素体:元素体可以是元素,也可以是文本
4) 空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合

属性

1. 属性是元素的一部分,它必须出现在元素的 开始标签
2. 属性的定义格式:属性名=属性值,其中属性值必须使用 单引或双引
3. 一个元素可以有0~N个属性,但一个元素中 不能出现同名属性
4. 属性名 不能使用空格、冒号 等特殊字符,且 必须以字母开头

注释  

XML的注释,以“ <!--”开始,以“--> ”结束。注释内容会被XML解析器忽略!

3. XML约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
常见XML约束:DTD、Schema
作为程序员只要掌握两点 :会阅读 、会引入 

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><!-- ELEMENT: 用来定义元素 students (student+) : 代表根元素 必须是 <students> student+ : 根标签中至少有一个 student子元素, + 代表至少一个 student (name,age,sex): student 标签中包含的子元素,按顺序出现 #PCDATA: 是普通文本内容 ATTLIST: 用来定义属性 student number ID #REQUIRED student子元素中 有一个ID属性叫做 number,是必须填写的 ID: 唯一 值只能是字母或者下划线开头-->
引入dtd文档到xml文档中,两种方式 :
内部dtd:将约束规则定义在xml文档中
外部dtd:将约束的规则定义在外部的dtd文件中
<?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对象。
优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
缺点:XML文档过大,可能出现内存溢出显现。
SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
优点:占用内存少 处理速度快,可以处理大文件
缺点:只能读,逐行后将释放资源

XML常见的解析器

解析器:就是根据不同的解析方式提供的具体实现。有的解析器操作过于繁琐,为了方便开发人员,有提供易于操作的解析开发包
JAXP: sun 公司提供的解析器, 支持DOM和SAX 两种思想
DOM4J :一款非常优秀的解析器 , Dom4j是一个易用的、开源的库,用于 XML,XPath和XSLT 。它应用于Java平台,采用了Java集合框架并完全 支持DOM,SAX和JAXP
Jsoup :jsoup 是一款Java 的 html解析器 ,也可以解析XML
PULL android内置 的XML解析方式, 类似SAX

dom4j 的使用

导入JAR包 dom4j-1.6.1.jar
使用核心类 SaxReader 加载xml文档获得 Document ,通过Document 对象获得文档的 根元素 ,然后就可以操作了
常用API
SaxReader对象  read(…) 加载执行xml文档
Document对象  getRootElement() 获得根元素
Element对象 
elements(…) 获得指定名称的所有子元素。可以不指定名称
element(…) 获得指定名称的第一个子元素。可以不指定名称
getName() 获得当前元素的元素名
attributeValue(…) 获得指定属性名的属性值
elementText(…) 获得指定名称子元素的文本值
getText() 获得当前元素的文本内容

xpath方式读取xml

XPath 是一门在 XML 文档中查找信息的语言。 可以是使用xpath查找xml中的内容。
由于DOM4J在解析XML时 只能一层一层 解析,所以当XML文件 层数过多 时使用会很 不方便 结合XPATH 就可以 直接获取到某个元素
需要再导入 jaxen-1.1-beta-6.jar
使用dom4j支持xpath的操作的几种主要形式
语法 说明
/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 的节点
Node :节点对象 

以上是关于二3 XML的主要内容,如果未能解决你的问题,请参考以下文章

需要示例代码片段帮助

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

在片段中添加 ListView

在 solr 3.4 中放置突出显示片段配置的位置

在扩充XML文件之后,不会调用onCreate()

创建片段而不从 java 代码实例化它