XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件
XML来源SGML
SGML(SGM)标准通用标记语言
是一种定义电子文档结构和描述其内容的国际标准语言,具有极好的扩展性
是所有电子文档标记语言的起源,早在万维网发明之前“通用标言”就已存在
是1986年国际标准化组织出版发布的一个信息管理方面的国际标准(ISO 8879:1986 信息处理)
简单的理解就是对于数据进行结构化组织呈现,用于描述文档的显示式样或者描述文档中文字的用途
XML概念
可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
与HTML一样都是标准通用标记语言的子集,
只不过超文本标记语言被设计用来显示数据
XML被设计用来传输和存储数据.
语法上和HTML也是相似的,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。
逻辑上来说SGML是非常适合用于Web项目中的
但是SGML的固有缺点,复杂/庞大/学习成本高等
所以XML这一SGML的子集,应运而生.
W3C在1998年2月发布1.0版本
W3C在2004年2月发布1.1版本,但因为1.1版本不能向下兼容1.0版本
所以现在使用的仍旧是1.0版本
W3school XML在线文档
http://www.w3school.com.cn/xml/index.asp
W3C组织
W3C是万维网联盟(World Wide Web Consortium)英文的缩写
它成立于1994年10月,以开放论坛的方式来促进开发互通技术(包括规格、指南、软件和工具),开发网络的全部潜能。
万维网联盟(W3C)从1994年成立以来,已发布了90多份Web技术规范,领导着Web技术向前发展。
W3C认为自身不是官方组织,因此将它正式发布的规范称为推荐(建议)标准,意思是进一步标准化的建议,
但是由于组织自身的权威性往往成为事实上的标准。
XML用法以及特点
XML在web中主要用途就是存储数据,只要能方便的存储数据,自然可以交换数据.
目前常用用法:
程序的配置文件(这也是最后大家使用XML最常见的目的);
数据交换:不同语言之间用来交换数据,因为他是统一的格式
小型数据库:用来当数据库存储数据。
XML与HTML比较
HTML的元素都是固定的,而XML可以自定义元素;
HTML用浏览器来解析执行, XML的解析器通常需要自己来写(因为元素是自定义的);
HTML只能用来表示网页,而XML可以做的事情很多。
XML和properties比较
属性文件只能存储平面信息,而XML可以存储结构化信息;
解析属性文件只需要使用Properties类就可以了,而解析XML文档是很复杂的。
XML总结:
XML是一种灵活的结构化数据存储和传输格式,没有预置的标签(HTML就是预置的固定的,浏览器负责解析)
所以需要自定义标签,
既然是自定义标签 ,自然需要自己去动手解析
也就是说:
在Web项目中,想要使用XML作为程序的一部分
XML三要素
1.语法格式 这个没什么好说的,必须遵守基本的XML规范
2.约束文件
任何的程序都不会是固定不变的,你的解析程序和XML文件也绝对不可能是完全不变的
比如可能你的XML文件需要用户书写,然后程序进行解析
如果用户随意书写,不可能存在什么程序能够保证完全正确的解读用户的输入
所以需要约束,也正是这个约束 让XML的内容的书写,和XML的解析程序达到了解耦的目的
只要引入了约束标准,XML文件的内容就不允许随意书写
只要遵循约束标准,解析程序就承诺一定可以正确的解读数据
3.解析 你自己定义的标签,自然只有你自己才懂得每个数据的含义
一个简单的XML文档格式
目前仍旧使用的是XML 1.0
一个基本的XML 形如:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
XML是一个树形结构,而且必须是一个树形结构 必须有根元素
aaarticlea/gif;base64,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" alt="" />
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
XML-语法
文档声明
元素
属性
注释
CDATA区 、特殊字符
处理指令(PI:Processing Instruction)
文档声明:
在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。
最简单的语法:<?xml version=“1.0”?>
用encoding属性说明文档所使用的字符编码。保存在磁盘上的文件编码要与声明的编码一致。
如:<?xml version=“1.0” encoding=“GB2312”?>
用standalone属性说明文档是否独立,即是否依赖其他文档。
如:<?xml version=“1.0” standalone=“yes”?>
没有xml文档声明的xml文档,不是格式良好的xml文档
xml文档声明必须从xml文档的1行1列开始 也就是必须第一行顶格写
编码属性应当被指定为文档被保存时所使用的编码
最好的避免错误的建议是:
使用支持编码的编辑器
确定编辑器使用的编码
在您的 XML 文档中使用相同的编码属性
XML元素
XML中的每一个标签,就是一个元素
元素指的是从(且包括)开始标签直到(且包括)结束标签的部分
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
要求:
1.所有元素都必须有关闭标签,省略关闭标签是非法的。声明不是XML的元素,所以第一行的声明,并不需要关闭标签
2.XML 标签对大小写敏感
3.XML 必须正确地嵌套
4.XML 文档必须有且只有一个根元素
命名规则:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格
5.可使用任何名称,没有保留的字词。
命名建议:
名称应该具有描述性,并且在此基础上尽可能简短,可以使用下划线 _
避免使用连字符 - ,比如 a-b 有些可能会仅仅解析到a
不要使用 英文句号 .
不要使用 英文冒号 : 会被当做命名空间解析
XML属性
一个元素(标签)可以有多个属性
XML的属性是键值对的形式,
属性由属性名与属性值构成,中间用等号连接 比如 sex="male"
他的属性值必须加引号
单引号和双引号均可使用
如果属性值本身包含双引号,那么有必要使用单引号
到底是使用元素还是属性?
建议是如果可以,尽可能的使用元素,而不是属性
因为:
属性无法包含多重的值(元素可以包含多个)
属性无法描述树的结构(元素则是树结构的一部分)
属性不容易扩展
数据本身设置为元素,数据的数据才去设置为属性
XML注释
注释的语法与 HTML 的语法很相似:
<!-- 这是一个注释 -->
注释不能嵌套
CDATA区 、特殊字符
所有 XML 文档中的文本均会被解析器解析。
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
CDATA 部分中的所有内容都会被解析器忽略。 CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束
CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。
在 XML 中,文档中的空格不会被删除,都会保留
所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯在这个地方并不是一件好事
XML 以 LF 存储换行
特殊字符
在 XML 中,一些字符拥有特殊的意义。
如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始
预定义的实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。
&开头 ; 结尾
处理指令
处理指令,简称PI(Processing Instruction)。 了解一下
作用:用来指挥软件如何解析XML文档。
语法:必须以“<?”作为开头,以“?>”作为结尾。与声明是一样
常用处理指令:
XML声明:<?xml version=“1.0” encoding=“GB2312”?>
xml-stylesheet指令:
作用:指示XML文档所使用的CSS样式XSL。
<?xml-stylesheet type="text/css" href="some.css"?>
注:对中文命名的标签元素不起作用
XML-验证约束
验证方式有两种:
DTD
XML Schema
要理解限制本身的含义,限制是对于XML文档结构的限制
XML中文档的主要内容可以说是 元素和属性
限制也是针对元素和限制来进行的
- 一个XML文档有哪些元素?
- 有哪些属性?
- 哪些属性在哪些元素上?
- 哪些元素可以包含哪些元素?
- 被包含的元素可出现的次数是多少?
- 属性的值可以是多少?
- .......
大致也就是这些方面的限制
所以如果你想要给你的XML文档编写限制文件,你需要先确定你自己的逻辑规则
也就是上面提到的这几个主要问题
然后查找文档 用对应的方法书写出来即可
不同的限制方式自然有不同的语法,也就有不同的特点
XML Schema 比 DTD 更强大 是DTD的替代者
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间
DTD w3c文档
http://www.w3school.com.cn/dtd/dtd_intro.asp
XML Schema w3c文档
http://www.w3school.com.cn/schema/schema_intro.asp
dtd xsd约束的引用
DTD文件引用
有三种方式
内部
外部(在本地)
公共(也是外部只不过不在本地)
内部直接定义在DOCUTYPE内,格式为:
<!DOCUTYPE 根元素名称[
]>
aaarticlea/png;base64,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" alt="" />
外部本地
<!DOCTYPE 根元素名称 SYSTEM "dtd文档路径">
比如
<!DOCTYPE student SYSTEM "test.dtd">
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" />
公共DTD也就是网络上的,本质也是外部
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL" >
比如 mybatis的mapper文件
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
一般都是使用第三方提供的技术框架等,使用XML进行数据配置,使用他们提供的DTD进行约束限制
XML Schema xsd文件引用
XSD文档中是创建元素和属性的地方;
XML文档中是使用元素和属性的地方。
所以在XML文档中需要说明使用了哪些XSD文档。
在 XML 文档中引用 Schema, 引用信息是设置到根元素的开始标签内
<根元素名称 此处为引用信息
>
此处为xml文件的正文内容
</根元素名称>
想要弄清楚引用方式必须了解清楚xsd schema文档的定义格式
每个xsd文件都是一个XML文件
schema是所有文件的根元素
一个 schema 声明往往看上去类似这样
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">...
...
</xs:schema>
其中:
xmlns="http://www.w3school.com.cn" 表示默认的命名空间是"http://www.w3school.com.cn"
xmlns:xs="http://www.w3.org/2001/XMLSchema" 显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。
同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
targetNamespace="http://www.w3school.com.cn" 表示被此 schema 定义的元素 来自命名空间: "http://www.w3school.com.cn"
elementFormDefault="qualified" 任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
比如Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
beans为根元素,整个文档的结构为:
<beans>
</beans>
所有的引用信息设置在 开始标签 <beans> 内
xmlns 与xmlns:xxx 是一样的,只不过是xmlns是默认的命名空间,也就是省略了前缀的元素使用的命名空间
它的值也就是xsd文件中的targetNamespace 的值
还需要设置
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
一旦您拥有了可用的 XML Schema 实例命名空间
您就可以使用 schemaLocation 属性了。
此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置
需要引用xsd文档的大致步骤
1,先确立你的根元素
比如:
<beans>
</beans>
2.然后选择你的默认的命名空间
xmlns=""
3.默认的只有一个如果你还有更多,你需要设置别名
xmlns:xxx="" 可以设置多个
可能还需要指定位置
4,需要给约束指定位置,指定位置的前提就是先包含XML Schema 实例命名空间:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5.使用xsi:schemaLocation="" 指定具体的位置
到底什么是名称空间?
名称空间是用来处理XML元素或属性的名字冲突问题。你可以理解为Java中的包!包的作用就是用来处理类的名字冲突问题。
无论是在XML中,还是在XSD中,都需要声明名称空间。这与Java中使用import来导包是一个道理。
如果被定义的元素在声明时没有指定目标名称空间,那么就是在无名称空间中,
那么我们在使用这些在无名称空间中的元素时,就不用再去声明名称空间了。
声明名称空间使用xmlns
例如:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"。
这表示声明了一个名称空间,相当与Java中的import。
但是,Java中的import的含义是在下面使用的类,如果没有给出包名,那么就是import导入的这个类。
而xmlns表示,下面使用xsi为前缀的元素或属性,都是来自http://www.w3.org/2001/XMLSchema-instance名称空间。
也就是说给名称空间起了一个简称 别名 前缀 指定了就必须使用这个
例如在XSD文件中,xmlns:xsd="http://www.w3.org/2001/XMLSchema"就是声明名称空间,
而这个名称空间是W3C的名称空间,无需关联文件就可以直接声明!
在XSD文件中所有使用xsd为前面的元素和属性都是来自http://www.w3.org/2001/XMLSchema名称空间。
名称空间命名:一般名称空间都是以公司的URL来命名,即网址!当然也可以给名称空间命名为aa、bb之类的名字,但这可能会导致名称空间的重名问题。
前缀命名:前缀的命名没有什么要求,但一般对http://www.w3.org/2001/XMLSchema名称空间的前缀都是使用xs或xsd。
http://www.w3.org/2001/XMLSchema-instance的前缀使用xsi。
默认名称空间
所谓默认名称空间就是在声明名称空间时,不指定前缀,也可以理解为前缀为空字符串的意思。
这样定义元素时,如果没有指定前缀的元素都是在使用默认名称空间中的元素。
xmlns=”http://www.w3.org”
当在文档中使用<xxx>时,那么<xxx>元素就是http://www.w3.org名称空间中声明的元素。
注意:没有指定前缀的属性不表示在默认名称空间中,而是表示没有名称空间。也就是说,默认名称空间不会涉及到属性,只对元素有效!
XML解析
DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,属于事实上的标准
这是两种操作逻辑,是一种规范描述,是一组标准接口
这并不是针对java语言解析dom的技术
DOM和SAX只是定义了一些接口,以及某些接口的缺省实现,而这个缺省实现只是用空方法来实现接口。
一个应用程序如果需要DOM或SAX来访问XML文档,还需要一个实现了DOM或SAX的解析器,
也就是说这个解析器需要实现DOM或SAX中定义的接口以能够提供DOM或SAX中定义的功能。
DOM解析原理
DOM要求解析器把整个XML文档装载到一个Document对象中。
Document对象包含文档元素,即根元素,根元素包含N多个子元素…
一个XML文档解析后对应一个Document对象,
这说明使用DOM解析XML文档方便使用,因为元素与元素之间还保存着结构关系。
优先:使用DOM,XML文档的结构在内存中依然清晰。元素与元素之间的关系保留了下来!
缺点:如果XML文档过大,那么把整个XML文档装载进内存,可能会出现内存溢出的现象!
SAX解析原理
DOM会一行一行的读取XML文档,最终会把XML文档所有数据存放到Document对象中。
SAX也是一行一行的读取XML文档,但是当XML文档读取结束后,SAX不会保存任何数据,同时整个解析XML文档的工作也就结束了。
但是,SAX在读取一行XML文档数据后,就会给感兴趣的用户一个通知!这是一种回调的形式
例如当SAX读取到一个元素的开始时,会通知用户当前解析到一个元素的开始标签。
而用户可以在整个解析的过程中完成自己的业务逻辑,当SAX解析结束,不会保存任何XML文档的数据。
优先:使用SAX,不会占用大量内存来保存XML文档数据,效率也高。
缺点:当解析到一个元素时,上一个元素的信息已经丢弃,也就是说没有保存元素与元素之间的结构关系,这也大大限制了SAX的使用范围。
如果只是想查询XML文档中的数据,那么使用SAX是最佳选择!
JAXP
JAXP(Java API for XMLProcessing,意为XML处理的Java API)是Java XML程序设计的应用程序接口之一
JAXP是sun提供的 用于隐藏底层解析器的实现
java要求XML解析器去实现JAXP提供的接口,这样可以让用户使用解析器时不依赖特定的XML解析器
JAXP本身不是解析器
也不是解析方式(DOM或SAX),它只是让用户在使用DOM或SAX解析器时不依赖特点的解析器。
所以可以说是JAXP是java提供的统一的解析XML的接口规范
你不在需要关注任何的具体的XML解析器的细节
只需要使用JAXP接口规范定义的API即可
JAXP DOM解析
jdk中 javax.xml.parsers包下,四个类:
其中DOM方式:
DocumentBuilder 解析器类
DocumentBuilderFactory 解析器工厂
DocumentBuilder 抽象类,可以使用DocumentBuilderFactory.newDocumentBuilder() 获得
DocumentBuilderFactory 抽象类,可以使用他的newInstance()方法获取实例
parse方法返回Document接口,父接口是Node
示例:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text; public class DomParseTest { public static void main(String[] args) throws Exception { //创建解析器工厂
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//使用工厂创建解析器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//使用解析器解析XML文件得到Document对象
Document document = documentBuilder.parse("src/dom/test.xml");
//根据标签名获取 NodeList是一个集合 集合中的元素时Node 使用item() 获取元素
NodeList nodeList = document.getElementsByTagName("name");
for(int i=0;i<nodeList.getLength();i++) {
Node node = nodeList.item(i);
//得到标签里面的内容
System.out.println(node.getTextContent());
} //给第一个学生增加一个性别属性
//查找第一个学生
Node firstStudent = document.getElementsByTagName("student").item(0);
//创建性别标签
Element sexElement = document.createElement("sex");
//创建性别标签对应的文本
Text sexElementText= document.createTextNode("男");
//文本添加到标签上
sexElement.appendChild(sexElementText);
//标签添加到第一个学生节点上
firstStudent.appendChild(sexElement); //回写数据
//需要使用transformer 抽象类 由工厂创建,工厂也是抽象类由newInstance()方法创建
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
//拥有tranform()方法进行传输数据
//transform(Source xmlSource, Result outputTarget)
//Source的实现类DOMSource有构造方法
//Result接口有实现类StreamResult
transformer.transform(new DOMSource(document), new StreamResult("src/dom/test.xml")); } }
<?xml version="1.0" encoding="UTF-8" standalone="no"?><students>
<student>
<name>张三</name>
<age>18</age>
</student>
<student>
<name>李四</name>
<age>28</age>
</student>
</students>
虽然方法有很多,但是本质很简单,解析器,解析器工厂
解析器解析出来文档结构
既然是DOM树,自然都是节点
Document Element Text Attr 也都是节点 Node 类型的
NodeList 是包含Node 的集合 可以使用item方法获取节点 所以说一旦解析出来文档
一切皆是Node 针对于操作方法都在这个体系内了
再详细一点的说就是:
无论使用什么DOM解析器,最终用户都需要获取到Document对象,一个Document对象对应整个XML文档。也可以这样说,Document对象就是XML文档在内存中的表示形式。
在DOM中提供了很多接口,用来描述XML文档中的组成部分。
其中包括:文档(Document)、元素(Element)、属性(Attr)、文本(Text)、注释(Comment)、CDATA段(CDATASection)等等。
无论是哪种XML文档组成部分,都是节点(Node)的子接口。
Node方法介绍
Node基本方法:
l String getNodeName():获取当前节点的名字。如果当前节点是Element,那么返回元素名称。如果当前节点是Text那么返回#text。如果当前节点是Document那么返回#document;
l String getNodeValue():获取当前节点的值。只有文本节点有值,其它节点的值都为null;
l String getTextContext():获取当前节点的文本字符串。如果当前节点为Text,那么获取节点内容。如果当前节点为Element,那么获取元素中所有Text子节点的内容。例如当前节点为:<name>zhangSan</name>,那么本方法返回zhangSan。如果当前节点为:<student><name>zhangSan</name><age>23</age><sex>male</sex></student>,那么本方法返回zhangSan23male。
l short getNodeType():获取当前节点的类型。Node中有很多short类型的常量,可以通过与这些常量的比较来判断当前节点的类型。if(node.getNodeType() == Node.ELEMENT_NODE);
Node获取子节点和父节点方法,只有Document和Element才能使用这些方法:
l NodeList getChildNodes():获取当前节点的所有子节点。NodeList表示节点列表,它有两个方法:
l int getLength():获取集合长度;
l Node item(int index):获取指定下标的节点。
l Node getFirstNode():获取当前节点的第一个子节点;
l Node getLastNode():获取当前节点的最后一个子节点;
l Node getParentNode():获取当前节点的父节点。注意Document的父节点为null。
Node获取弟兄节点的方法,只有Element才能使用这些方法:
l Node getNextSibling():获取当前节点的下一个兄弟节点;
l Node getPreviousSibling():获取当前节点的上一个兄弟节点。
Node添加、替换、删除子节点方法:
l Node appendChild(Node newChild):把参数节点newChild添加到当前节点的子节点列表的末尾处。返回值为被添加的子节点newChild对象,方便使用链式操作。如果newChild在添加之前已经在文档中存在,那么就是修改节点的位置了;
l Node insertBefore(Node newChild, Node refNode):把参数节点newChild添加到当前节点的子节点refNode之前。返回值为被添加的子节点newChild对象,方便使用链式操作。如果refNode为null,那么本方法与appendNode()方法功能相同。如果newChild节点在添加之前已经在文档中存在,那么就是修改节点的位置了。
l Node removeNode(Node oldChild):从当前节点中移除子元素oldChild。返回值为被添加的子节点oldChild对象,方便使用链式操作。
l Node replaceNode(Node newChild, Node oldChild):将当前节点的子节点oldChild替换为newChild。
Node获取属性集合方法,只有Element可以使用:
l NamedNodeMap getAttributes():返回当前节点的属性集合。NamedNodeMap表示属性的集合,方法如下:
int getLength():获取集合中属性的个数;
Node item(int index):获取指定下标位置上的属性节点;
Node getNamedItem(String name):获取指定名字的属性节点;
Node removeNamedItem(String name):移除指定名字的属性节点,返回值为移除的属性节点;
Node setNamedItem(Node arg):添加一个属性节点,返回值为添加的属性节点。
Node的判断方法:
l boolean hasChildNodes():判断当前节点是否有子节点;
l boolean hasAttribute():判断当前节点是否有属性。
Docment方法介绍
创建节点方法:
l Attr createAttribute(String name):创建属性节点;
l CDATASection createCDATASection(String data):创建CDATA段节点;
l Comment createComment(String data):创建注释;
l Element createElement(String tagName):创建元素节点;
l Text createTextNode(String data):创建文本节点;
获取子元素方法:
l Element getElementById(String elementId):通过元素的ID属性获取元素节点,如果没有DTD指定属性类型为ID,那么这个方法将返回null;
| NodeList getElementsByTagName(String tagName):获取指定元素名称的所有元素;
l Element getDocumentElement():获取文档元素,即获取根元素。
文档声明相关方法:
l String getXmlVersion():获取文档声明的version属性值;
l String getXmlEncoding():获取文档声明的encoding属性值;
l String getXmlStandalone():获取文档声明的standalone属性值;
l void setXmlVersion():设置文档声明version属性值;
l void setXmlStandalone():设置文档声明standalone属性值。
Element方法介绍
获取方法:
l NodeList getElementsByTagName(String tagName):获取当前元素的指定元素名称的所有子元素;
l String getTagName():获取当前元素的元素名。调用元素节点的getNodeName()也是返回名;
属性相关方法:
l String getAttribute(String name):获取当前元素指定属性名的属性值;
l Attr getAttributeNode(String name):获取当前元素指定属性名的属性节点;
l boolean hasAttribute(String name):判断当前元素是否有指定属性;
l void removeAttribute(String name):移除当前元素的指定属性;
l void removeAttributeNode(Attr attr):移除当前元素的指定属性;
l void setAttribute(String name, String value):为当前元素添加或修改属性;
l Attr setAttributeNode(Attr attr):为当前元素添加或修改属性,返回值为添加的属性;
Attr方法介绍
l String getName():获取当前属性节点的属性名;
l String getValue():获取当前属性节点的属性值;
l void setValue(String value):设置当前属性节点的属性值;
l boolean isId():判断当前属性节点是否为ID类型属性。
JAXP SAX解析
SAXParser 解析器类
SAXParserFactory 解析器工厂
SAX是事件驱动型XML解析的一个标准接口
对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数
我们需要做的就是实现这些回调的方法体
示例:
public static void SaxParse() throws Exception { //创建解析器工厂
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
//创建解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
//执行parse方法 此方法依赖DefaultHandler,所以需要自定义类实现DefaultHandler
//其中qName 是标签的名称
saxParser.parse("src/dom/test.xml", new DefaultHandler() { @Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
System.out.println("<"+qName+">");
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("<"+qName+"/>"); } @Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.print(new String(ch,start,length));
} });
}
DefaultHandler中还有很多的其他方法
aaarticlea/png;base64,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" alt="" />
使用DOM解析主要就是获取文档后对于所有的节点进行操作
使用SAX解析主要就是根据各个事件发生时,进行所需要的响应
如果想要对文档进行复杂的操作设置更多的需要查询Node下相关的实现类 Document Text 等
如果想要对文档进行复杂的筛选查询,那么需要精心的利用DefaultHandler处理各个事件
注意:既然说JAXP是一个接口规范,为什么可以直接使用其来进行解析?
上面我们已经提到了工厂类都是抽象类,并不是自己实现的或者创建的,调用的newInstance创建的,他其实使用的是java提供给我们的默认实现的解析器工作的
JAXP还是接口规范,并不是一组实现API
JDOM和DOM4J
这是两种第三方的解析工具 仅仅用于java
JDOM与DOM4J相比,DOM4J完胜!!!所以,我们应该在今后的开发中,把DOM4J视为首选。
DOM4J也是Hibernate使用的解析XML的方式
DOM4J查找解析器的过程
DOM4J首先会去通过JAXP的查找方法去查找解析器,如果找到解析器,那么就使用之;
否则会使用自己的默认解析器Aelfred2。
https://github.com/dom4j/dom4j/wiki/FAQ 中有关于解析器的说明
DOM4J对DOM和SAX都提供了支持
可以把DOM解析后的Document对象转换成DOM4J的Document对象,当然了可以把DOM4J的Document对象转换成DOM的Document对象。
DOM4J使用SAX解析器把XML文档加载到内存,生成DOM对象。当然也支持事件驱动的方式来解析XML文档。
在DOM4J中,也有Node、Document、Element等接口,结构上与DOM中的接口比较相似。
但还是有很多的区别:
在DOM4J中,所有XML组成部分都是一个Node,
其中Branch表示可以包含子节点的节点,
例如Document和Element都是可以有子节点的,它们都是Branch的子接口。
Attribute是属性节点,CharacterData是文本节点,
文本节点有三个子接口,分别是CDATA、Text、Comment。
dom4J 官网 https://dom4j.github.io/
aaarticlea/png;base64,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" alt="" />
刚才提到的工作原理
DOM4J使用SAX解析器把XML文档加载到内存,生成DOM对象。当然也支持事件驱动的方式来解析XML文档。
这句话是重点,他两种解析方式都可以,而且,他是使用的SAX解析方式 创建了一棵DOM4J树,此树中的对象 可以转换成DOM树中的对象
dom4j 2.1.1 API
https://dom4j.github.io/javadoc/2.1.1/overview-summary.html
第三方的工具使用必然需要查看他的介绍方法
基本的使用在官网上已经有了很清晰的介绍
官网 https://dom4j.github.io/
获取指定元素标签的内容
//查询元素
public static void dom4jParseSelectNames() throws Exception {
//1.导入包 import org.dom4j.io.SAXReader;
//2.创建解析器
SAXReader saxReader = new SAXReader();
//3.使用解析器解析文档
Document document = saxReader.read("src/dom/test.xml");
//4.得到根节点
Element root = document.getRootElement(); //5.得到指定元素的列表
List<Element> list = root.elements("student");
//6.遍历list
for (Element element : list) {
//element是每一个student元素 得到student下面的name元素
Element name = element.element("name");
//得到name里面的值
String s = name.getText();
System.out.println(s);
} }
}
//增加一个元素
public static void dom4jParseAdd() throws Exception {
//1.导入包 import org.dom4j.io.SAXReader;
//2.创建解析器
SAXReader saxReader = new SAXReader();
//3.使用解析器解析文档
Document document = saxReader.read("src/dom/test.xml");
//4.得到根节点
Element root = document.getRootElement(); //5.得到第一个student元素
Element studentElement = root.element("student");
//6.在student下面直接添加元素
Element sexElement = studentElement.addElement("sex");
//7.在sex下面添加文本
sexElement.setText("男"); //8.回写数据
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom/test.xml"), format);
xmlWriter.write(document);
xmlWriter.close(); }
使用Dom4J格式都没有变乱
aaarticlea/png;base64,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" alt="" />
XPATH
什么是 XPath?
XPath 使用路径表达式在 XML 文档中进行导航
XPath 包含一个标准函数库
XPath 是 XSLT 中的主要元素
XPath 是一个 W3C 标准
http://www.w3school.com.cn/xpath/index.asp
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
起初 XPath 的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是 XPath 很快的被开发者采用来当作小型查询语言。
就按照他的名字XML Path Language 理解就可以完全掌握这个概念
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。
类型都是节点类型的
其中直接值也就是常量 ,比如xml中的<year>2018</year> 2018就是基本值 原子值
节点之间的相互关系有 :
父 每个元素以及属性都有一个父。
子 元素节点可有零个、一个或多个子。
同胞 拥有相同的父的节点
先辈 某节点的父、父的父,等等
后代 某个节点的子,子的子,等等。
DOM4J对XPath的支持
在DOM4J中,Node接口中的三个方法最为常用:
List selectNodes(String xpathExpression):在当前节点中查找满足XPath表达式的所有子节点;
Node selectSingleNode(String xpathExpression):在当前节点中查找满足XPath表达式的第一个子节点;
String valueOf(String xpathExpression):在当前节点中查找满足XPath表达式的第一个子节点的文本内容;
语法格式可以根据w3school中的语法形式进行选择
http://www.w3school.com.cn/xpath/xpath_syntax.asp
想要在DOM4J中解析XPATH还需要另外一个包 Jaxen
可以去中央仓库下载 或者随便搜索一下 jaxen-1.1-beta-6.jar
否则就会报错
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAw4AAAB7CAIAAABSJ0D1AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA/+AAAP/gGy1pUqAAAgAElEQVR4nO2dv0/jyP//n/7qXSRlOn5chRIKjoI9dEJy/gIH6ZSKdqUrbG2VNHTo0K62o3GqVSwd+mybKjoJ+y/AEtrNLQVLQbxUB0m1LpNuvsX4x9jxrziBhDAPRYJ4PDOveXlsvzKv18wI//d//wcOh8PhcDgcThQCIWTRMnA4HA6Hw+EsKf9v0QJwOBwOh8PhLC/cVOJwOBwOh8OJhZtKHA6Hw+FwOLFwU4nD4XA4HA4nlpdjKrWqEAQoxqrUZaH6XM2ZRMlWtdWCIKDacqQVqrDmUfu06p1RDD/7IjAUCILzWdTlfgpeULtof6OfhUua8dZ79VjGrfBhEL7Rh4Oq0os4vgiiJeRkwDJuBaUnnNuLFmQK/l/gkUc/i3qp0Fda8mNkp/JMwsyxriztWk7K28HvuyjPr/Ds6n1SMZ4aqQ1CQPoQFyiEAUGAoDAHlMwWJzVP6YfJ8mztorePECVDFgwFTaBPQAgIgeQeDD30FmK+LM+zd+mwz7oj+Y/1Jb7RgxJe3wtKj/ncL+Z5HxZjcWblcFBVesp10inievG5pJkD/wMAyCDtBQuSSuMSjVWsa/nZ3QbK2AXMORWYT725xSg3QPjlBMQbtCw0pnr7GBBqEFVXgRaUFtqLUKbuWjmtKioC1H7WhnQ1iGqUbb0kD70lEWPJuLY1lPS9ieNr65ft9QXIM0lIwr0t7zJaxm2luyCpAKCkt7ekBdafgbK0Q5ZcxAlejgOOswAqCx0L8VgSMV44R0foXEyXRalBVHHp2UblxdhJLI1LqCKaZ1Nk2d1OP4ezRIxb/9hifWOJX6bLLyFnzsSbSs64NzNoT13+LWY8T4kZFY+OY7BQFdCy/NABb7SZHqk0AaDmlakklhaUKntdycTWlavA5HaF5GcLNBRUW67fZCLGIkEh0dqYyKVlUgZQxiVBWwKANvF//lLxaIHVVmxXmRQjp3pjxEiGlWHyekVKOOmWok3z+nyCevORr/cqQqBpobsyju1DoBPtvYoWw4AGHB3Or120VNbrpGRNYjk8AjT/jph71FTCRWHL96OO0q5Xjlsv4QmQ/HBIuPUSciHq8Z6GE3FCP2zcyfW98GFgwVbcVNYRY5z3Qk6iqjEOlDu0Ow/FozeF6IomnErRYtCoJsYRRk/z62J9Vb7w49aHXtUY+2VGOrAmJMyjqCeVMCxwWl2B63LbGjJ5pxTDOXL6aALapwmPZHRpiYrK1+S5Q3SZQCaR9FUCELUf/p8QQnQCEFH1TiWq7qawBeoEILLunCOCydUnopfEVMccCEkTPp8QooopdTlf9aDwqUzWNUOB0e0KaSNYoC4TwM/FNjNWvYTocvgCBQoUiZcoT2hyKqh4okr6KoFIRDnQxgQx2LbPS71ZkNm+miBhUJ9kQvMp7UogqvfGFpiojXBnSLhl/Jqc03TZKZPtD3E3Ucr9mKNdiWXGJU0eZ59FcbeDdwexH68PJDz0kh8pbEvlbE+bhFsvQYyUJ0BMUqzwibn8vFN06b7+HfIPt/SfsvwVf/90vn37Afkr5K/yt/CZgVzffnjnBJr+91e8f4yTI5z67Yeoj9wvP2X5q/918Ch6X9n/naojhR+p77/C/xosMJuEQc08r4SBXEES6qLl+y0aqTp7KRPFcHKN1PdMB3CrmLy4LhPnJ/WoTBflqaGjSlp0hGO5AV1G8y0sA5UmZN2PD2h9BOTAyHyDDkZa+KhBPXaPS1BFaIzn1h/PL+MomDQ1BpomdG+MQYIuQ/vo/24WVWcoAhJk4LY/Q11PVqCjjagCvfiMwyPgBhZS1Cu1mQAOtkCa6/Oco6FPqOQmjo4DkdexYqQxd/XGESthqLta6JiQ62m55i4GgDhthEQ6hgjcZf6JJdUn7rj4m6h/O3WLnDLi29W/BUREBvQnJIXwO1v87eBEnRPIgKw7/1+y3sPgQ88ZTUl7pCQQd71Sbr2YZy8l4gmQkJRB+IQCG5cgJHMom33WHcnvvJiYUvtdCVcDdjRCfrff3gOA8puSiPHdEMD44ssIByUn196GuombwThUcvcKUwR0721dSt7oTql+AHMwcr6trV++K5nd+9bQVk4fzQPvzJD7rHRcL+LK9lW/udH/sxRR4MuQ0K6xI3De2ExsXbCMgYaS/pfXokJDKmUVw8lVOPw9mDQ1aT0q5aI8OWlh3VIbsoBKDZDdBwEA4NaEfBKVoQ8TMCtosgd3mX+Zd+r2rnO75nuFG93ws7WyA2jouwXOPUbhWQuU4enbD0xOU68SHOGXAQDWBUzgZL6GEqP57TIQNBoixUjlOWNK4iQ8PEKzCaMNiepNxGcpPdfcxUCcNso4EtHsOjejcTbllZUg12AwN3vCTTQLce2SjiFWUBEAEf3LwI2fkBTCunP/S7sdkoh66KU+UhKIvF7pt15CWHfkEyA+KV34hAKn5NrWUFTXmCNrRRH27RBwDpbqXsizH4tdOPy92Ozaxp8lCcD1Y/MB8h8BN5bz2p4M6I7HOO/VrpjvB8z/e1v6Qa92eg+UdOdFC2B0+wDz4bsQ+NXAiPFLIan3LbuE8WHd0XWhPxjhYD0qyxRilNcLwPhuCIntFdlJ7VGJF+UZ+F/aCRZuYg4mPJG83y6cpyBOvYoAjXnyKsIzyrR8YiSQIGG5AbmJrgFJwkUH4pH/jpx7u/IXqEFwLZFp77VjFW9biPyZE6KyAwB3FqQpn1FJ7SrjkgAWqpNWUUJSEDrc5Rno/GnzwrBrSo/+5408uYwvvozE+hQTuIzzXu3KNw6M814tkD6++y8640TVGVl+CROIrGt89x/wS2yeJxDjRZI2A671FqYMogMaE6tYxi5ifGcViEA32zjc3c1Ma+RUdgAz8PO3fxv45bSCJKjXgAbfNcNCHRa+m8bIHNadg3gxloU0CesytK7j6jppZM01dzGisdAxoburBJHprYTyIdCBNy6TcBOVDyFi6klzmdpVxiVdk8nEmZE5yYXO/5cw3dMmC1M8UiJ/Q07wnLfecz4P14oiRrds8O9wZLIjSdGML76M5Hf7pO18wu/gKcOlqS/M9+hNYBn3zYeS3t6SYdf8WODizia0f3Otf5hRws2iO7r37BLGE1NXYfsXxPjOphDDGoyBwna+ISXk7lHPR6KpZCiu81uCLsNs+vMjjlVAC0wPadH/aQRSLX3FRauFpsnEGbiPlewPvnIDMlDzZsoYqGmBApeEaduVWFa8eisQgRv3HRjwgEiQvXeeAaE2mXl+JIixJKRJKNUBDa0LmOxrJkO7lKkmYc2gqOS+lCJGGUdAx33PJ91EZXxWYTYDt7mSOvEze7v6MONWIo1PUgRoIj6z8Y4ZnjYZSdaGH1tpoVrJtr7XM956Mz4Pp5oBt7Z+cgDtkzejylY+ZZ08n/DqNfRH82C9McXrtrizCfw3dgLNQn6u6/uKE/5Sar8r4eHxrTPhiwbW3CcvkDiVhJZx70bV2Gfdkfh7yR0BeG4JY4mtC1JtQ4RdY2ecGfZ0YgwHb7ujQAdYK+wmXuswM/So5yEqrJuOHhkKahpk3XlbSG3IQLPiPJXKDRAdWs3N9RaHbqPowie1mFhFL0ulCT0URSihrzJluve8M/21AtPL7s7obhPInvC1KRamiyOhrvzEtCsfsep1X2z04E4fKrMYUbsPNB0t6SSQNGcSxXgS9c5VQsCJDm42g6+Z1FwxwwyxTU4tMEb4E5npS1HLLqSOdjROYDLv+YSbaPI2P3aH2fK1K7CCQ7CuhCQwa23cqCCMYy75aZODBG00PkPUnFYfZbxeqbde1LP3KYSfN9Kf+/qBF0F8f1P/lQlejqPQ+KOEq+CK0v4b2u5eQf6tlFTAZIHyhvjwWFF6gtL7uP5rv+4uAH19L3yycbDlDFztbekHMLvf6Vu/LO3060VmKnvGTTZiJSxLpdvTSFU8s4QIh3XT0aPEurC2ftnekv3rco83JbddiWJ4WU4fd9/tBztAqf1+Q2TKdNbVcCb8f28+eNmdtQly9ajnQyCEPFddFqoV7OqB8HAO5xlQBGAlOp7VQqUZeAXSIzxeh7P8DAfV00ewr8DhoHr6uPtuv71HF7kupK40bZz3atgif05lUc2HjBK+DsatD9+bvyzmQiwEvlo3ZyUx/NEFqwUNqK/o8+2ik3WOPYezZFjfbBPFnTW44dKRDhdbYZZt/Dj1yNO8SJCQs/rwUSXOikI9yJRVGnRh2wWkT63ncOaN4E5h43AWCGnvP1tdz2kqcTgcDofD4bwwuAOOw+FwOBwOJxZuKnE4HA6Hw+HEwk0lDofD4XA4nFi4qcThcDgcDocTCzeVXgLKzAvrZcFqzWERPA5n2bFQzXZDGcqsC8ZyloHhoOotxrgKGBCEua1Qz8nGazWVqFnwCnubocxhxXCqPf/z/Ctuz0xcB3D0M7/VnxPqWmGmbTJVO7urBi1BMRzLJt8VmUXzViuwMQh93fqf29YwMfsSMhxUlV7EJhXXweWzp1gYevq6XiXGua/bkE5yJUnOCvWv6pGyaP63aAE4z4mFj/E7jZUbII3Y1Em8xYpaVVSEJ91F4XmRQdqLluGVIbUha2i+xSFdI8rC2yYgoy2BmuGyux6b1UKl9vRrrxuoNCHroS7t7bJuGbeV015nyfZemIHSKi9CvbZ+2V5fVOXO8uLtEkA3GOnB7UX5kgCgcQlUUVP4k+rZeK2jSq+T1luYMnR5zsXSfbiaZ3MulvOqaOuAiTMDAIwzmIAe9RooN6CK0D4+7UBm66NrqEVD98Yyu4/8hz0nGenPfX/3j70NddPfRDZfkkPjJLhjPedpWWlTid2A0+tS9GClCTB7cGZ0SEUWCMBQUG05LmT6YTuwIoR9Olm272Y9QaGRoEgxqAw0V7Xl+sjYdhlomhE7jQe2Kc0bq3R4BGh+q+MURfEV4nnuJsJHvPCs1HaxivJLsFAV0LJ8Sbx2PUUHiGtXal3T9qhWNezunMrHFKH5tN4brd544VObHFugBFWEVoNhBDbqnmR7dw5isBnDfT7mTglSflMSYXddz4i7D2i0A4txpnieu3HrQ+BM49z9en0vfBhY1C/2YWA5vr97X1msy4zdEP5Dr2qMfUnc6BznyOmjCTBbn95n6TXTtiu1rtgCaathK0Gvk2Xcht2d2bx7gYomYpWixbi+j6yraoyzaIOmeic/MfR+6T5LXRyArCq6TNS+94UAzFdC+ioBiD5NgapIIAcKlN38ukwAv0D2TPZ/elqWSnWZQCSevDJTV5wYtHBRJX2VQCSiHG6jDCKq7pleCUG8c5KZ1B49QjWcoCj61a+iT1Td+UdkT2OanNyuQFvYuvpEBPM1cwdIUE5Sj4prV2JdeXrUREMyXrIECRN6b6x6895fCQVSqehVC1yCib4RknBqMdxaHG1M5ArdfZTBoyh/lb+Fj4j6iBDS179D/uHW81OWv+Lvn4T9+v7RLW+k6j+df96zpxH9b/frtx+gWQaPovxdfP9DZ2v/9iOmrpH6/iv8rz9lV7zYJpDJAsNJTAmhAuPalVRXkqJoq91czJnhhuh/s/VmIpwltl2haxcUOEkb3snhg0EicuVPyvEW4+RldUeVpDYTZyBBBm77MxRnoGkyHgEJuhz2AnixO4dHwA0sABY6JuS6m+kYInCXOqRk4aMG9XPUxl5pYpzQYCMTR8cobzNFtqB5qU+AX1eihNSvcemJUUYjW4BEdLuoorxf/xM/s0TV9aFM1QG06CHAhB6Vp135epQEGehc+IVkvKypEkb23gT15rm/0q4XyjgSAfi3TEQZrcCQT+7bXFRdbUzkursBdtO31VsruKNb9ll3JL/zYn1K7XclXA3cUZaBhpL+17pbXqEhZdrtVf6DZhnh9w3Jr2vc+sdmNm0tHdeLuLL98aHNjb7juCnVD2AORlnqAuwaMwDjj4vsbTHBWIECc7UrSVFOq92InPKbkojx3dCt94vt3hl298pTTl5i2xXS5/jiywgHJSkll0NZ2iHt/YTwNeP8XkPx6E3ECXmSyofZXiicObDSYd1K0HU1S4iO0Q3v317ZATT04T5SZd9f4MdHl3Ekotl1Xtg0AuMk7R63LmJPSxADCCRtlwHv6W/hbTPJozE71l26hGXg1oR8Mn3pce3qwwTMCprsyYx3ZncbeYgP647rUTnalbNHAccqKk0YDUi0EDnTZU2RMLKuNPVOfX+lFUjNRwDaRxxLAWNFq/l1hTY/znebJ/cNcSe9hOH4hv5zbWsoqmtM0lpRhH07BNbQH4xwsD79nVfccQvcXS8A3it5dPsA8+G7EHC8MC/RXwq5bIjYsG7jvFe7Yr4fOH/ztCtRUVSMuhe5zMRiS7UN8fTx7Hq9vUcLKel7mJG4dpXflMTuY/ca0h4wtDsPRVUupebKXqNY32qszSfJ4dZ/ZHCejtUdVVIEaDIIcT7zDmWeBneUoqYtZot74wymiOOnrLh/C1A7JgELN09QtU78q0zIE04Jie1RT9OuOOhPya4BAF0tNaQGwEwSxqk39/2VcL2UGiCirwMm3gbjh2TdzxK2k57gNjdv088ZjkzHjklgfPffnERikN/tkzb7earJa8Z5r3ZV0t2KdN8yeJJ2xbJWOnLjmo1/2UG1nMS3C1hbPzlw6rK+2eZm6XAtQ640LOO2dgUxaspkviSfnUpsEmd+rKqpZEBLHMaflsoOYIId2u/fZvhBb6FjBt4NWW5x6mDyh1UN/0dzPjG6GmCiIvgWm2O9zW95va4GUYWULGEZu8gWh5jx1V7xjYYnJ6FHZW8XQ84eBaCMExlaFzCgydkWaMglYZJ6891fidfLUKAB8gnKEnQZZjNDrPq8b3PK9q7rgkys+18bmxvHe3RoZHQbiAUemc4ASWH7FwQcZLFkND6KO5OToZ4Ku3sF3/0UIHu7GJIUlUyh8UcJV7YBu3tVOpl1gYaEdgGA9Buta3zxZcR4+lJyJXF9X+mOcLAVYfHkS6JQ/0PKD1TOfFhVU6kCEbhxvULKxCQyao5kf8uWG5CBmmdbGIHl6ZJJrkWJmgrkx6MYEGqzitEO/o7XZUCeYgAmQsKJEzQRnxvpEh6rwQmuFlr0/zKOvLAVC9UKzCyS0Vy1PEuxTdsBkntUbLvi65qlR0l1QINQi7YSIq9XsoTRJKg33/2VUCBd8cudn0+j+mqppvy8b3OKVAdMXCTZSsZ5r3ZVVOX1MtxxiE/eJC9b+eSPfEi1DRF2jZ2nZtD/C4e/e2Ex49aH782HLMLRXPd5VndcK+xiKjOruLMJ/Demigj5nuLbFV9XoqJS2CvJsGvKvRZlrDgT8bKunJnULq+urmF3HlgzLi1X3Ay463vhk42DLX/y/4xJHhedrP53zsysaqxSGZ9VVJoQmgCg9qG+RWBMXUJfRcULgMiw6mCbAAIE92GcacXFMk5k1GrBWAp29byY4ZN2H9WKI7xOcFf1hc8jxizED/DUBOcfUQ2sXZkgYbkBsg3BU4iI/qWT1PiMTsXJpfZxFLpeMThLsQn+ETnj4oTTdoDEHpXQroS68l9KCaqIJqKcqjHXK0XCGGLVm/f+iitQqQQXUqI3jgaljnaCf+EJbnOaSwaaZ2iET9Y+9ZySNjf6bT+yWPpzX0evpvTo14DHZG39sl1QlHvBebMW1fdOIFRZ2lK/fKe5xPqv/d/vK4N04crSTh+3FU8SIOWF6lNqv9+4OfUkSV12stCQNzqnjxXl0ZGwzkgY366EupIUlSb8cb2odaHWJls6rTcwsV1uXZXuo1j/VZoiVyTj1j82AFx5qgCc6PV8Sd43OmcoR+gnJw8CIWTRMqwuVguVZuAVSI8sJGIpC4rw9Osgc+ZBq4rOETOjjTNfDAi1zGY35zmwjNvKl1L/rzxz35zFrzMZlC+EVhXNXb5a97Oxqg64ZeWiE573tGAM3ylDFxSo83fD0mMoaMLxeHKeBAl9FVot02qxnGfg+r7ShePxzISteP644eDjFeTfVshOok+APreTng8+qvTEGApqrPtNRP9yuaZ2shIu7XAXh+KE4yxfL1pJDAU10B/ugusz4nAWCGnvO0Oe/Fn9vHBTicPhcDgcDicW7oDjcDgcDofDiYWbShwOh8PhcDixcFOJw+FwOBwOJxZuKnE4HA6Hw+HEwk2ll4CSuFj2vLBaEARUW+lnvgAsVJ9FacvM83Sb10LmHmUo2bYMGrc+ZF9gejUxzuengeGgqvSED4NVWd3BgCDk2YeA8zS8VlOJmgWvsCMaytx2f1seHbaq8zTynrNd0XUZ4WtkKBCqqbuSvXim1TztzOzSR7QExXAsG4H5ZLcaZ+kAVitygxq65cXcXuTDQVXp5dnbZG512YrSE5R7X0nX94Jy2xri1eJsrqL0hEl1Xd97SaFtT+JzSVBF1JbjAct5vabSK4XutBVDuQFCXuAC0BY6JlQVZmeljAnxhq9/mILUhgw037rX3cLbpr+RHABZd/Y9pOtJPvkYm4FKE7I+sUHN+OLLSK5viA/2xQoZE+Lm+GNov7MFsrZ+2d4nudbynh1nNfD2Pmnvk3cl7RNj91zfC59s+d0+ae+T9xvofvespaRcABqXUMUMOyFyngNuKr0mWm9hytDlRcsxV6wLmCIODyGmbHH6wjg6crdM5sTT1gETZwYAGGfBjeQYyg2oIrSPT2tMtz4GDDWPod15KO68KR1tjjrflsa2mJnd30v4Yq/QLZcf6c99f9eUvQ1109sqeNz6x8bBlrN329r6yQFMV2nxuVwaJ8FdrjkLY6VNJeqXCQ2/04OVJgDUvPH5bJZ7ZIEADAXVlus3EcKj90rQERByGcTheMoECBP7pUeKQWWguaotx4kQaJeBphmxdz1bWkY3VrIOk7XBtiv0CEhISuCiA/EI5TKOxAjbwmtdqF1sXZ7ks7Qrrm9Q/D7g+tFS++H2IRAzTpZQV0K3yafeSOFTtZFQV767MrZACaoIrQbDQE2DrMcuYby9OwcxEN+j4u4vwPpmm5ulw7XC4e9Fc8K2cHxzk+45xmvjubqck08fTUD7FE7F9b3wYWA53rGwT8evSImIEGI8QY4fLaUuAOulI0SPkyXVxbSrdoW4pIwxTIGKJnQYLcakr3A4qDKusWRF0dRqxuG0od15YPdUsbtXwBSDi7R7dzOezXlCyKqiy0Tte18IwHwlpK8SgOjTFKiKBHKgQNnNr8sE8Atkz2T/p6dlqVSXCUTiySszdcWJQQsXVdJXCUQiyuE2yiCi6p7plRDEOycLcTpM0Eag6kkdxiQlCkFE98rShveZ4/CaEyww+erna1dsZ9MZMQghfaIyRUfXpTsHdZm5uG7TUvphTLfJqd544XNf5Rx3ZYrw7rUO9Oo+EYOnZb1ecWJE9Sg2V0j5PiP1/VdRHxFCyOBRlL+rA/845K94/9gnhJCfsvwVf/90Mg0eRfmr/G2ytMTUbz8gf4Wb1Ne/Q/6hu0mODG5doa+uGISQkar/9MuMruunTA9+++HI/O0H3KYF6g21izmNEKL/HUqKyZUN/W+2FQlNDheeWVHeyeGDQZhcbHupJvW4KxtRFyG5XlWcJ2B1R5WkNhMxIEEGbvszFGegaTJj+xJ0OTye723Kc3gE3MCCE0Yj191MxxCBu9QhJQsfNaifozb5ShPjhEYamTg6RnmbKbIFzUt9FiK18ZGNeGV/MCUkJeJ438oAUN4Ggj44UXVDr4IF9m/zb1oc0a7EzkadMn4EWBmNzFs3SfUJJSR0gIRuk1e9qcJPd5Xz3ZWpwpdxJALwb7SIMlqBIZ/cDwe2R4Vy3d0AuxHKH9qdh+LRmwIArBV2EfTBbW70nfCa0nG9iCvbGbMZjkwUd9YyCRVCfrdP3T3lNyUR4zs6gLG3dSkV3FNK9QOYgxH9YhkDDSXdj/IpNKTMO8vulWRPZgf7rDuS3225HaXUflfC1aA1BPVGifWtRkS7aNKGlyugjXzENjlU+PjiywgHJSkll0NZ2iHtfeacMMb5vQb3insMB9VT++j9fvvNNLkAlA+zvTU4T8vqmkoIer7io5kzYXTDL9fKDmDCf1TK/sh/uQFCdzMt44h5rNNYiu20uEPrIva0FDGYpEB2C2+bSb6J+ROpjT5MoFnxL0rTdE9KSErkosO8nyTICPjgdhljcXuXsWyOIZqoCNNPK4tsF4D4znZrJr3CU5Aga0HHVnwHSOg2udWbIvy0VxlAjrsyVXjDOTIZiqTVnCyVJnQSiLbO93Bge9Qk4s7kMeubbaKw7RgHpToTqgIAvxQ8mcrrBfiWzYa6OWqe9qafVlaq77n/rq1ftnc8u4SdbMV6vvoDxlCYmlL9wO6ywcjXthYy8taKIka3Q8cbtbseaWSMbh9gdr97Ela6o6jTpiOuyeU3JRGu2EO781BUa6XUXBlrrF0hbA5+uxdO7aP3O1E2Ynwulpl+53PmwOqaSooATXbmvxCCRYYya84TuaYtZjto4wymiOPl2IdaJ/5FIYRu256eFI2Fjumrl77zkubBeUZVGZcEpJ/XYJogtrNZuJmt5GMVH+e0CEIO9eYWPq6u3HdlgvBKDRDR1wETb4O68mbAkeB990QPB/N24tD44ssIsGvsqzcpVMUzqgqNv/ZJ+9e8BlMY47xXuyrpdLJVe18/8CW8+2+mkqXaxs0/81kEwZkm5n+2ZnlmxTfZCa+mMdRuJFmGXGlYxm3tCmL9V3/Maa0oYtTsQvds1onxwohck+zkGwPnzI1VNZUMaIkD8tMSHkOiThw5ze6x0DEDT/kstz51nPkjrob/qzefGF0NoDaBa7E55sUzT0OtQAS6kWPqCUnx0HGUwEtUD/vgPO5uJn70MwbT2Swj/QmdrYxdzBSVWT4EOrhzvyZ0gIRuk0+9OYVPqCvfXZkovKFAA+QTlCXoMsxmhnVo5v1woLDDlh40qjdgAWzJiJ4HZw3G2CwGX4mMwaTPslSj3b1CzNBRYfsXzOTqWisdwb4YeF/dMarNigMAACAASURBVCSP4cikY11rhV3gZuC13e76YzbFncn5XzOR0GQAkH4r4co26DoOf3jOx5RcSVzfV7ojHGwFLJ610tFmoEBrMAZjmUXnYkkaLeY8H6tqKlUgAjfuG0aZGGOn75XsL49yAzKYJS6MyIXmokmuRYma1OM7kgwItVnFaAd/kesyIGcbV4iTkAozpQ4dd2Qt6mWWkBQvRoSZWIGIiHlwNFQlOlSrDzP4o23qdiV2tmM1ON3XQospOb2uMo6Ajju8k9QB4rtNPvWmCh8rcFxd+e7KhALpOmHu/HwaC5i+Ds28Hw4UqR5hpntWgk9xZxOT8+AwHLztsu9sltHtA8T1on9grbCLqQyL4s4m8N+YVkrdPb7gtQ0Rds2f6jVuGUzJ6XUVDn9H54trANEBm0/eRDlb+eQFIbH+R1tR7rVAIUVc3Sesq+n4xbKu7p3UZADYK8mwu4bdeWAvUFquuBlw1/fCJxsHW/7kf7ddjT9KfrtCVzk2F8NFJ8Nvcs7Ts+i48ieDThygH7VPVDE85Yc9IW5GWAgZgTI9EuaUeROFvE/k5J3wdCRvUg+ITsLCR4rhTcDxZ0zoGeYTTTQwPAMuTkKaGKXDhPIJnYgUo42EpEgxIufrqaKjh1BpeuicmEuZr10pnU1nSpuYJBVRV+jC6eGMcf0wudtMq95k4fNd5dx3ZWSB8sSVpbebrEfMgIurJasYEwXKE+XL4SdJeE4WLUj/TmdF0blU3oedFRVKipgYNXgU/RP82VvMJLLY80V91Ne/B+eX/ZT90vwZavF1uTPgAtmDU9uihXfn/clf5W8kJEao1UEJ3Yzx0+LC2k5pcsxctjy5/EZFX1B3ZmLwKqflIiSlG3OeEYEQsmhrbXWxWqg0ofb9eFJ6ZCERS1lQBECPWEOPw+GkY0CoQeZ30GJwFr9OGKF5cbSqaO5mHf7nPCWr6oBbVi46+aepPwmG716hCwrU+VOew8mH5OygwnekeSZsxfPHDQcfr9jFHl8+hoIm0Od20lLAR5WeGENBjQ2FENG/jFr5ZnGwEi7tcBeH81IwFNRARwIEpbdoaTgvD9Led0Yo+QN5aeCmEofD4XA4HE4s3AHH4XA4HA6HEws3lTgcDofD4XBi4aYSh8PhcDgcTizcVOJwOBwOh8OJhZtKLwElarHsuWO1IAiozmnHsQVjofosSltmnqfbTGIo/q58L+ISzFdRhpJty6Bx60P2tadXE+N8fhoYDqpKT/gwn93olgADgpBhlx7OM/FaTSVqFrzCjui8xuax+9vy6LBVnaeR95ztiq7LCF8jQ5nDnr7PhtQGoZvrza/Ml6IoqxW51xDdDWNuL/LhoKr0EvYAmSfRddmK0hOUe/+CXN/PvqfvS8e5yiHj7/pecDdLph9WmU6WieOABFVEbTkesJzXayq9UuieWTGUGyAEl5EbpS0zFjomVBVm58UYE1kQb/hKhplYIkUZqDQh6/7q/A7jiy8jub4hPtgXK2RMiJvjj0bEvr+LYW39sr1P/orcRO/pGQ6qSu8t1tXNyOSS7u+XvN92t5wzznuVbsFJelfSPgVtzcYlVDHDnoac54CbSq+J1luYMnR50XLMFesCpojDQ4gTm5W+aI6OIvb95UyyPIpqffT37mUZ2p2H4s6b0tHmqPNtaWyLmdn9vYTJfX9fI7Zyah+937+UiunnMrm6V5DfbTndZW9D3Rw19eCIVOMkuF81Z2GstKlE/TKhmAl6sNIEgJqbmtEhFVkgAENBteW6A4Swp0AR/OP0k+VHMBvwERoJihSDykBzVVuOwyLQLgNNc9I1ECgtoxsrWYfJ2kgIZMkX43LRgXiEchlHYsQr02tdqF1sXZ7ks7Qrrm9Q/D7guodS++H2IRAzTpZQV0K3yafeSEXNq8AXp6gEbcTdX4D1zTY3S4drhcPfi+aEbeG7YELuuYDjxnF1OSefPpqA9imciut74cPAcrxjSb6eyQgh49wrzRnbSKkLwHrpCNHjZEl1Me2qXSEuKWMMU6CiCR1GizHpKxwOqkqv6o6QJSuKplYDw2mldnunsZZFXrbS8Q2KO36uwuHvRfw3DnYPCaoIrTtl0ZwnYMHb9T4dusxsuq6H92CnO4dPtWGzKjLbhuuB/dLpfuZegeyZ7P/0tCyV6nJ4J3mvrjgxaOGiSvoqgUhEOdxGGURU3TNj9oT3zslCnA4TtBGoelKHMUmJQhDRvbK04X3mOLzmBAtMvvr52hXb2XRGDEJIn6hM0dF16c5BXWYurtu0lH4Y023yqTdBUekFRm2KnpRr6RWV3G1CZfqM1PfuRvSDR1H+rg7845C/4v1jnxBCfsryV38T+8GjGN5kniEu1d3Bnib19e+Qf+hukiODW1foqysGIWSk6j/9MqPr+inTg99+ODJ/+wG3aYF6Q+1iTiOE6H+HkmJyZUP/m21FQpPDhWdWlHdy+KDLSH0/IbZ7UdhLQ0iEYoN6845O/6riPAGrO6oktZmIAQkycNufoTgDTRO6t3OhBF2G9jHwW9bbr+fwCLiBBSeMRq67mY4hAnepQ0oWPmpQP0dtFZcmxgmNNDJxdIzyNlNkC5qX+ixEauMjG/HK/mBKSErE8b6VAaC8DQR9cKLqhl4FC+zf5t+0OKJdiZ2NOmX8CLAyGpl3dZLqE0pI6AAJ3SavemMVla/AxFzLr6jkbnN3A+xGlDm0Ow/FozcFAFgr7CLog9vc6DvhNaXjehFXtjNmMxyZgSGHKZDfOdEw5TclEeM7Onyyt3UpFdxTSvUDmIOR02ZjoKGk+1E+hYaUedPZvZLsyexgn3VHvl8Jpfa7Eq4GrSGAcesfW6xvRQ3A0KQNL1dAG/mIbXKo8PHFlxEOSlJKLoeytEPa+8w56WJ4UUr9elH75I5IrZWONqH94w6DDQdvu6OI7OXDbG8NztOyuqYSgp6v+GjmTBjd8FOysgOY8K0v2d/XsNwAoXvilnHEPGqNM5jAdlrcoXURe1qKGExSILuFt03I+jPuvBipjT5MoFnxL0rTdE9KSErkosO8nyTICPjgdhljcXuXsWyOIZqoCNPPlopsF4D4znbL2MpTI0HWgu7L+A6Q0G1yqzdWUfkKTMy1/IpK7TbizuQx65ttorDtGAel+gECPrhfCp4c5fUCfMtmQ90cNU97008rK9XdqGGsrV8yjiHGxRbwfPUHjKEwNaX6gd1lp25d21rIyFsrihjdDqnViN31SCNjdPsAs/vdk7ASaTdMSVyTy29KIlyxh3bnoajWSqm5ZqcsbambXgcoNP7akh8eK7QuDSf1IjaL0ab4TL/zOXPgf4sW4MlQBGgy3d/b+bowNAjuy3MhO0UbZzBFfF6OLaoTNDC1cix0TMD01QsAHViNqAEDMEZVGZcEsFCtoCIAIvqXMVmyEdvZLNwAuzOUfKzibQsnM5TgkafvJSoqX2eOzvUiFJXWbczbiSzjiy8jYFRTesxB+2K4HhPa4hlVhcZf+w2MWx++N097TRTV99NHwzAY573aVUlvO4M9xnmv5kp49x/wS/6SpdrGR21g/ZG/BA9vPGwuxDcZWFs/OXis/Wu390o0kuzzWoZcc6Cw/Qvwn/e11G7veyOfxvkjfomZwbeTbwycMzdWdVTJgIYZfqROEB5DoqPxctqrwkLHhE5A3E+WVwt1nPkjroY/SpFPjK4G0F/DAgQBNQ3QpghmnxsViEA3ckw9ISkeOjzAqpfoYR+cx93NxI/+Mi7p8j8mzmYZ6U/obGXsYqaozPIh0MGd+zWhAyR0m3zqZYSYUFS+AhNyvSBFxXQbdtjSY2h3HiC/8yeKk/aWjOh5cNZgPDGoUGj8tU/av0bMjZoOu3uFmKGjwvYvmMnVtVY6gn0x8L66Y0gew5FJx7rWCrvAzcBru931x2yKO5vQ/p3jgpwJTQYA6bcSrmyDruPwh2egpOSaj1TMUGIoSf5twvWZNAjKeT5W1VSqQARu3AenMuGAo4/L7M/6cgMymCUujMiF5qJJrkWZnGjDOpIMCMyvmnxitFljgkCXARmE+KMgyURISIWZUoeOO7IWtahaQlK8GBFmYgUiIubBWS00zZhQrT7M4I+2qduV2NmO1eB0XwstpuT0uso4Ajo37reEDhDfbfKpNwyrqAwFRrclPtdLUZTDRLeR6hFmumcl+BR3NjE5D46GqjDvbJbR7QPEdWYi+lphF1MZFsWdTXizq4zzgF9Jqm2IsGv+VK9xy2BKTq+rcPg7Ol9cA2ht/eQA2idvopytfPKCkFj/o60o91qgkCKu7hPW1XT8YllX905qMgDslWTYXcPuPLAXKC1X9Ay4rBjn9xpK+p8T9tBwUFXub+q/RgyqXXQy/CbnPD2Ljit/MujEAfpR+0QVw5Nx2BPiZoSFkBEo0yNhTpk3bcr7BMRwJ2pFzh7y5luFhI8Uw5uA48+Y0KOnTkw3Ay5OQpoYpcOE8gmdlxSjjYSkSDEi5+upoqOHUGl66JyYS5mvXSmdTWdKm5gkFVFX6MLp4Yxx/TC520yr3lRFxRUYOh4SPkmM5VZUareRw0+S8JwsWrf+nc4Co3OpIuZGkXBSxHyrwaPon+DP3oqYQjVxvqiP+vr34EStn7Jfmj9DLb4udwZcIHtwalu08O68P/mr/I2ExAi1OiihmzF+WlxY2ylNjpnLlisX296QGgONiioqWufuKRHTSDmLQCCELNpaW12sFipNqH1/ehQ9spCIpSwoAqBHrKHH4XDSMSDUIPM7aDEY570atsjkmM3LpVVFczfr8D/nKVlVB9yyctHJP039STB8lwddUKDOn/IcTj4k9FVotaXZaGXlsRXPHzccfIyM9Xm5GAqaQJ/bSUsBH1V6YgwFNTZ0ZebJVnOHlXBph7s4nJeCoaAGOhIgBCa+cTiZIO19Z4SSP5CXBm4qcTgcDofD4cTCHXAcDofD4XA4sXBTicPhcDgcDicWbipxOBwOh8PhxMJNJQ6Hw+FwOJxYuKmUFyV5aeMXiNWCIKDaWrQcaTyP5l+KNp4QC9VsqjaUZ98kZ4LhoKr0hA+D5Z2mv/wSRmBAEKZck53DWUFeq6lEX4TL+QigsvmfmG3M82EoWXd/a1WDYrifGdeMWSrNZ9cGtRtYPSzEUKYCs5eA6nNGYWa5KFYrsLsONQj8z21rmJh9Kq7vBaUnKPepktLdJyY/+faj8BkOqkovYfONZSagkwmLzUkNbxsiQRVRW5oblsNZEP9btACcGLwVNVpVVITAkt/5sfBRi00sN0CYXdIal6DfrBYqnaVbDmoOTKMNircQs9VCpbaAlc2lNmQNzbc4pJfDwtsmIC9ueWgDlSZkPdQ5vS3iLeO2ctrr1H+9lAoz1zVu/RO//9fa+mV73ftWlnYIVclwUD21j97vNNbicj4XQQmfGcu4rXQLentHAuj+a5XzgrOw9XBQPX1EfUvdvG9O5mxcAlXUFL5mNOc181pHlV4QjUuoIppncyiq9RamDF2eQ1ErwCzaKDegitA+znPALyNtHXD3tDfOYAL64t5hrY/JhlpZ2unXi2b3cfZRCcu4bz6U9HcrtBzz8zG++DLCQcm9TqXjehFXtgEAtnJqH73fv5SKsbkbJ8GdjDmcV8dKm0qsC8m7z+nBShMAap4/JVukheOvESAEd4+Pq8tQUG05uaot17M2fVTH4RGg+WPgOesy0DR9R0mk5FNF57DaCD1G2SRPhuXS/Mza2N5NF8OThMZ80A+rqkhFTSYF1CtBFaHVYBioaZB1dz1fC1UBLcuXJCR87tshrsA4HQYpvymJsLuu0yrgBvLcPdf3woeBRf1rHwaW48VjHW32WXfkblDvE3a0ZY8Ecnx5UZvVs0muDE5Fp48moH0KpyaQLGGsNkKOy+GgyngPo3MFywy6GgvbvwD/jb2q+4MRNosVACi126lDbrTLddPayuGsLgvervfp0GVm6289vBM43aV8qg2bdTm8aXlgy3FvR3Hd341clwlARJX0VQKRiHKmeifPoUeo/LnrkkFE1T0zsP+5j3dOWJ6Jbd4DheiBDdiT27gkmp9aGxNbfLNVJ3Q2KolXNZsrQRUJ6vWEQWgfe/egI3NQ4Dy3Q6jAiVyh60IZPIqBPeedI3Qn9r7+3d2anjjb0dO91r/9gPwV7x/7g0dR/i6+/6EHy/E3jf/2gykhqLPQxvJ+7RPbtgcKYcSIlD+5ddMQlvDbD2aD+p+yv199UKSQ3mJzsSeHD1LJae19/XvUVvYj9X2g0gA5blsOZ4VY3VElqc3ET0iQgdv+DMVZ+KhB/RwVr2OgaTJOEAm6HHDNnNCQFxNHxyhv56ncz5W3LroV7slE8E1OqDa84YTgj87+7Vy3BH4Czc+uDasVGFBJ7Wxe5NnhEXDjSBirqET1AkAZRyIAyPVwVlHFZcM/x8uV+3bwC5zIdXcD7KZHsK0V3PE3+6w7kt9teW6g9rsSrgbe8In8x3oZAEb4fUPyc7k7oTqpszNu/WMzA1SsNwoYjkwUd54nsGlviwnhKtUPYA5GESKF3GexuRzK0g5p74eDw9bWL9u/qnisKD0atDRd8Fb5ECJw96Jm73E482N1TSUACuNJiY/fzYR1ARPYjnpWG93wC6+yA5hw3ilMUmT2TLXfzVaXhbdNxlMzO32YQLPiq7dp+onSMUQTlTnN3Zu/5mfQhlZz2ltpQieBWOakzib7dZUbIG6AfKyiEtULODYiEBEstctYhNu7vlmWImE8u4nGvbiTXsJwfEP/uba1kBWyVhQxunVMJT9pd519zY9b2qN5sEXjxOfB6PYBZve758OqdBlTY29D3Rw1T+c9dy8G49z3zdWu/OMBr+XQ7jwU1VopNVcSw0FV+d75/VfS3tcP7Fq+yYAz/drkcF4wq2sqKQI0GYQ4nxcdyty/BWawtIwzmCKO5z1JSie+eglhJsiUcUlA+vM0mObILNqQdb+9bAE5O1uiomLVCyg1QERfB0y8zRZb9kS3g3mbfs5wZIatn2m4fmwGDYW5IL/bJ2324411FRp/7ZP2r89gMBnnvdpVSXdl0A+YtLX1kwNo/9oArG+2uVk6XMuQKxbH3KRDTdKf+/oB8sTa78xtrJjDeVmsqqlkQItyT+SGum/88WfD/10eGMkAQC0beX5DOEBXg6hCyltXVwPoy1iAIKCmAVrOAHOHCkSgm/ykZeyAsxnmzsxd8/PXxoydbVJRieo1FGiAfIKyBF2G2Yxd88Z3kM37dqCERq1iMP61sblxvBcaQwJArahSPXG4yPjXBqjV0hOUnvDJBuxatpDqGIo7m44VEg9jMOnJZ+bG7l6BmZUWRvqthCvbwPjiy4hxPqbkimF0+wBx3Z/jVlkvAuO77FZgwuAuh/MKWFVTqQIRuHH9VsqEx4G+gFNe9iwSZKBzAQAwINSYohqQgZr3ojUCK/KloqStZ6gI0ER8buSvqx0cn9BlQA4PVEwHjYOpZViYrg8z+GM0WfMR2pi35uevjbTOlglWUQnqpWtBufPzpWOIrAbYE9loqrnfDgAAqQ6YuEiylYzzXu2qqMrrZbgjJZ88E8dWPtmTk9rClfwZHP55VwLomMpW3h8jhcPfi7i6z7CSZNjCoHFXcWaW4xebmJIWQ3Fn05+VZpxPuNL2SjLsrmF3HlhrMi1X9Ay44s4mO4xkn3VHYEaq0rnozPnnH4fzoljVJSjL+Kyi0oTQBAC1D/UtAr4CCX0VlZr7zpDT35TtPqoVp0Cd4K7qF9gmgADBff9MsVykhZuYlJrg/COqgbUQ89c1V5yF6QT/iLc8Y6saiK0JS5ig+RhtPInm50hqZ4shQVFx6lUqwYWUyjiRUdOg1NGuAIBW880gL5b8KW4HmksGmmdohE/WPvWckjY3+m0/HFv6c19Hr6b06FdxPktTTk1Z2unjtuIJCeBgi67HaBm3bOjShISl9vuNm9N7wTFQSrpvsY3v/ptKikJD3uicPlaUR1pRv35fGbAnlI7rxUr3Uaz/Kk2RK6auv37Fh++e5r32ImRvPdCmFdXAop0WOibkk6max+GsEgIhZNEycJYGRVjACtRLywvThoVqBbvPLLABoeZbyQvFOO/V4FsAS8jySxhNq4rmLl+tm/OaWVUHHCcjhu/tolPo64t/5y0Oro1pkdBXodVm3RkwJ7biebvoggK/LZsVsvwSpmEoaAJ9bidxXjV8VOnVYyiouY4Inbz2cIQXrI2FjCoBoEoDHXUQPBcP54VD2vvOqOELuxE4nPnDTSUOh8PhcDicWLgDjsPhcDgcDicWbipxOBwOh8PhxMJNJQ6Hw+FwOJxYuKnE4XA4HA6HEws3lfKiJC6x/RKxWhAEVLPtKfZSaFVTFkNPwFBm2O1kTgwHVaUnfBgs1TZ6AZZfwggMCEKGteY5HA4HeL2mEjULlvNZSWXzP3PdbtZQsu53Ro2Myc+MK+gsRPM5tvm0WoFtUqhB4H/muovq9b2QbVMzumfF5CfPLvEsw0FV6WXY6GMZcbYTUXrCZBMcxU6qSIIqorasTwAOh7NkrOrGJi8fby2TVhUVYU5bdtAdxGIoNwI7qDQuQb9ZLVQ66F/iJe6V6bViOgxUmpD1kM7ld/vtPYBuf3Ha68xnX45x65/4XcPW1i/b6963srRDaK8YDqqn9lFg94kFEZTwmXHWv26XAOD6XvjUg3uNcH0vfLKdSzYcVE+/V8FcL2frGIUvQs3hcFJ5raNKL4jGJVQRzbM5FNV6C1OGLs+hqNWm9dHfkjaKsrTTrxeZ/UfzYxn3zYeS/u6lLeK8HEh/7vv7hOxtqJveXrbj1j82DrYcs2lt/eQA5hc7MCLaOAG0VXOjczicJ2ClTSXWheQ9EOnBShMAap5fKVtIiuO9EiBM7M0eWZehoNpyclVbrmdt+vCXwyNA850FOesymK3mYySfKlaJ1UbofcMmeTLk03xquyK1kSSehaqAluVnDDc5RlFBym9KIuyu6/EJuMa8vSyu74UPA4u6gT4MLMeLxzra7LPuSKxvhIyysKMteyQQ43IKb3HPJrkyOBWdPpqA9imcmkCyhLHaCDkuh4Mq4xqLzhUsM6urcWh3HthdROzuFfBgXwTcphJUEVo3U4EcDuc1Q1YVXSZq3/tCAOYrIX2VAESfskCIxCtDBpHd/KpIIAfqokm6TAAiqqSvEohElDPVO3kOPULlz12XDCKq7pkyicQ7JywP03BfG1FiRMqf3LpkktuVfJUJIaRPREY274gv8ESu0IWmDB5F+av8LXxE1EeEkL7+HfIPt46fsvwVf/8khJBvPyB/xfvH/uBRlL+L73/owXL0v7/i/WPfOfNHpFb8c8LyfFcHwYOBQhgxIuVPbt00hCX89oOqxRPD/RoUKaS32FzsyeGDQZhc337A0w9tnR7VxhzPAQ6H8/pY3VElqc0EmkiQgdv+DMVZ+KhB/RwVr2OgaUL3Ih4k6DK0j34s9gkNljFxdIzydp7K/Vx566Kbv57kCduJgmrDG3cJ/jrv3wIipg+kTiKuXbmvsqi6/rWJXHc3wG56YNZaYdf5zz7rjuR3W+7IUKn9roSrgTd8Iv+xXgaAEX7fkPxc7v6pTursjFv/2MwAVem4XsSV7YwPDUcmijvPE9i0t8WEcJXqBzAHowiRML74MsJBSUrJ5VCWdkh7PyE4zDi/11A8ehM8wQnq2m+/icpTPoQI3L2o2XscDufZWemwbiXoJpslRMe6gAmcRL3UjG7YMqjsABqcly+TtF0Gcplr1t1sdVl424Ssz2/Pyz5MwKygyR50bQDpGGIFFQEQ5xQMnqjDfFd5N9FmFXfSSxiOb+g/17aGospaIWtFEfatYyr5BsruegHwXv/jlvZoHmxd7mUTOJ3R7QPMh+9CwKHk2g17G+rm9+Zpr4mi+vTB4MZ5r3bFfD9w/pbflMTuY/ca0h71kRVVuZSaK3uNYn0r0LRv90J37LQ3YcbibR8vcs4Ch8N5JlbXVFIEaLI/vUURFirNbPRvAWol5MI4gyni87w3B4/db7yMS+JsdD9PgymKJ7rK5m36OcORCcjreWfAXT82g4bCXPDm6E1QaPy138C49eHJDSbjvFe7KultZ5jNOO/VvLS19ZODx9q/dnuvZH2zzc3S57UMudKwjNvaFUR2QuJaUYTd7Bb09o7TSYcjE8WjyCbnWEuCw+G8JlbVAWdAA+T63MqjTh9/oN7wRzIqO4AZGOno3wLy/IZwgK4GUYWUt66uBpiouDHONQ3QcgaYO1QgAt3k2N8yLglIH6KJsyeaZDTvq0zZ3gVuUteyMv61sblxvEffyqPbQLTyyESpnjhcZPxrA6PmqRvF/MkG7Fq2kOoYijv+/K84Co2/9kn7V3Vz1NSTz8yN3b2C71abQPqthCvbwPjiy4hxPqbkSuL6vtId4WAr4JtbKx1tBgq0BmNslg5DphIdLc79I4TD4bwOVtVUqkAEbly/lTIxYY2aPikvexYJMtC5AAAYEJhfvOUGZKDmmR1GYOnCVJSoGWShEzQRnxv562oTEOajy4AMQmZYUaaMIxFaLcMKfn2YwV/tyZpP1UaAtKucD6kOmLhIspWM817tqqjK62U4E9G1T56JYyuf7MlJbeFK/twnbebzrgSU9PY+aW/ltbELh78XcXWfYSXJ0e0DxPWif2CtsItYM8tZ43FiSloMxZ1N4L+x5eYN+NQA7JVk2F3D7jyw1mRarrgZcNf3wicbB1v+kgEOhcYfJV8bw8Hb7igiLOyiM+dfNRwOZxVZVQdcGZ9VVJoQmgCg9qG+RcCpIqGvolJzX65yut3Q7qNacQrUCe6qfoFtAggQ3Bf1FMtFWriJSam5viRRDawMmb+uueKs4Mc4vGTdCZRuVdE0/eNhCRM0H6+NaBKvMiuGSavL6AqUIAPNMzTCXUL71HOk3tzot/33rvTnvo5eTenRr+J8lqacmrK008dtxRMS8GwIy7itdP0o6QkJS+33Gzen94Jj0GLtsQAAAO5JREFUoPiOMGB8999UUhQa8kbn9LGiPNKK+vX7yoA9oXRcL1a6j2L9V2mKXJG4q3deeZIDnhdyb4u8uxdcbUS5Ji10TMgnUzWPw+G8QgRCyKJl4CwNigDoCUsvvhoMCDXf+FusKHRB6vCoyRKx/BJG06qiuctX6+ZwOKmsqgOOkxHD93bRBQXqizcOlgAJfRVabdYN73JiK563iy4o8NuyWSHLL2EahoIm0Od2EofDSYePKr16DAU112MTO6ntVWIoqIGOOgiuc43z0iHtfWfUkPd2DoeTDW4qcTgcDofD4cTCHXAcDofD4XA4sfx/zLkU5Xn6GEMAAAAASUVORK5CYII=" alt="" />
Jaxen是一个用Java编写的XPath引擎,用于处理各种基于XML的对象模型,如DOM,dom4j和JDOM以及Java Bean。
public static void dom4jParseXpath() throws Exception {
//1.导入包 import org.dom4j.io.SAXReader;
//2.创建解析器
SAXReader saxReader = new SAXReader();
//3.使用解析器解析文档
Document document = saxReader.read("src/dom/test.xml");
//4.得到根节点
List<Node> nodes = document.selectNodes("//name");
//5.遍历list
for (Node node : nodes) {
//得到name里面的值
String s = node.getText();
System.out.println(s);
} System.out.println("---------"); List<Node> nodess = document.selectNodes("//student");
//5.遍历list
for (Node node : nodess) { //得到name里面的值
String s = node.getStringValue();
System.out.println(s);
}
}
}
XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax的更多相关文章
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
简单介绍 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方.我们还是看一下官方给出的解释.例如以下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT ...
- MyBatis笔记----MyBatis 入门经典的两个例子: XML 定义与注解定义
----致敬MyBatis官方开放文档让大家翻译,不用看书直接看文档就行了,mybatis的中文文档还需要完备的地方 简介 什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以 ...
- Java开发笔记(一百零九)XML报文的定义和解析
前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...
- 使用dom4j解析xml文件
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xm ...
- Spring Data(一)概念和仓库的定义
Spring Data(一)概念和仓库的定义 Spring Data的主要任务是为数据访问提供一个相似的.一致的.基于Spring的编程模型,同时又保留着下面各个数据存储的特征.它使得使用数据访问技术 ...
- 中阶 d04 xml 概念及使用
idea新建xml文件https://www.jianshu.com/p/b8aeadae39b0 或https://blog.csdn.net/Hi_Boy_/article/details/804 ...
- 使用dom4j解析xml文件,并封装为javabean对象
dom4j是一个java的XML api,性能优异.功能强大.易于使用.这里使用dom4j对xml文件进行解析,并完成对文件的封装. 实现对xml文件的解析,主要使用到的是dom4j中的SAXRead ...
- java socket报文通信(三)java对象和xml格式文件的相互转换
前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每 ...
- manifest.xml微擎系统模块的安装文件内容
微擎在安装或卸载模块时会根据manifest.xml生成(或删除)数据库中相应记录,并执行manifest.xml里指定的脚本. manifest.xml文件内容详细介绍如下: manifest - ...
随机推荐
- spring深入学习(四)-----spring aop
AOP概述 aop其实就是面向切面编程,举个例子,比如项目中有n个方法是对外提供http服务的,那么如果我需要对这些http服务进行响应时间的监控,按照传统的方式就是每个方法中添加相应的逻辑,但是这些 ...
- 了解ip相关知识
最近一直扫盲,作为一个编程工作者,其实涉及的东西很广,但也一直没有深入一些网络的概念. 内内网IP局域网,网线都是连接在同一个 交换机上面的,也就是说它们的IP地址是由交换机或者路由器进行分配的.而且 ...
- php实现最简单的MVC框架实例教程
本文以一个实例的形式讲述了PHP实现MVC框架的过程,比较浅显易懂.现分享给大家供大家参考之用.具体分析如下: 首先,在学习一个框架之前,基本上我们都需要知道什么是mvc,即model-view-co ...
- 【python-appium】appium 关键字
Appium 服务关键字 关键字 描述 实例 automationName 你想使用的自动化测试引擎 Appium (默认) 或 Selendroid platformName 你要测试的手机操作系统 ...
- Codeforces831A Unimodal Array
A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- springboot 不同环境切换不同的配置文件
开发的流程是本地>测试>预发布>正式,所以不同的环境,肯定是不同的配置文件,所以我们需要针对不同的环境做不同的配置切换. 下面我们来说说 springboot 是怎么来切换的: 1. ...
- 【.NET Core项目实战-统一认证平台】第二章网关篇-定制Ocelot来满足需求
[.NET Core项目实战-统一认证平台]开篇及目录索引 这篇文章,我们将从Ocelot的中间件源码分析,目前Ocelot已经实现那些功能,还有那些功能在我们实际项目中暂时还未实现,如果我们要使用这 ...
- Jenkins获取运行job的用户名
1. Jenkins获取运行job的用户名 需要安装user build vars plugin 插件,然后就可以取到$BUILD_USER_ID变量. user build vars plugin下 ...
- python爬虫学习之使用XPath解析开奖网站
实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件. 实例环境:pyth ...
- 如何阅读Java源码?
阅读本文大概需要 3.6 分钟. 阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃< ...