9.18xml,xpath,dom4j

/*
XML
XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言. 一种数据表示格式,可以用于自定义数据格式。
比如顺丰要传送物流信息给淘宝,有收件人发件人目的地等各种信息,如果没有固定格式直接发送,难免引起问题
我们可以用XML文件来定义这些数据格式,从而实现数据的传输.
XML可以用于储存数据,传输数据,以及作软件的配置文件

XML的创建和编写
在IDEA里可以直接创建File文件,后缀名填写.xml即可生成一个XML文件
XML文件第一行是声明版本和编码
<?xml version="1.0" encoding="UTF-8" ?>
实际上我们在XML文件里输入一个"<",IDEA会自动帮我们生成这个版本和编码
XML文件里的标签必须成对出现,一个标签是根标签Root Tag只能有一个  <name></name>,标签必须有开始有结束.
特殊的标签可以不成对,但是必须有结束标记,如:<br/>
标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来<student id = “1”></name>
XML文件中可以定义注释信息:<!– 注释内容 -->
XML文件因为使用其特殊语法,比如<>一般作为标签出现,经常会和要写的内容冲突.所以当我们真正需要写这几个符号的时候,我们可以按照如下规则转译:
&lt;    <  小于
&gt;    >  大于
&amp;   &  和号
&apos;  '  单引号
&quot;  "  引号
比如在XML文件里写 age > 18,我们需要写 age &gt; 18
也可以直接输入CD,IDEA会帮我们生成CDATA区,在这里面可以随便写,无须考虑冲突问题.

 */

/*
XML的文档约束:XML虽然是一种规范文件,但其格式是可扩展的,所以本质上还是不固定的.利用文档约束,可以实现XML的标准化,让发送者和接受者
都有一个标准可以遵守. 比如约束XML文档里只能写书的内容,包括书的书名价格和作者,其他一概不能写.
DTD
后缀必须是.dtd,xml文件只需要导入即可使用,但是DTD格式不能约束数据类型
schema
schema本身是一个xml文件,他本身可以受到其他文件的约束,所以功能更强大,约束更严谨
后缀是.xsd xml Schema Definition,相比DTD格式更严谨,可以约束数据类型
 */

/*
XML解析技术
解析一般有两种,SAX解析,SAX解析是把XML文件一行一行解析,所以无论文件多大都能解析完,一般我们不适用
DOM解析,一般常用DOM4J框架,是把整个XML文件加载至内存中形成类似树的模型
主要里面有四种对象:Document整个xml文档,Element代表标签,比如学生/姓名,Attribute代表属性,比如学生ID号码,
Text代表文本内容,比如学生真实姓名的文本内容是张三. 这四个对象都是实现了节点Node接口

Dom4j解析XML
先下载jar包然后倒入项目Add as library
使用dom4j框架解析XML文件主要是两步,第一步是创建SAXREADER对象,第二步是得到Document对象
SAXReader s = new SAXReader();
获得saxreader以后需要调用read方法来获取document对象. read方法的入参多种多样,可以使file可以inputstream
这里我们先获得inputstream,我们可以通过类对象来调用getResourceAsStream方法,入参可以直接写/正斜杠加名字
这样写即使工程模块名更改了,也不会找不到文件,是目前最优雅的方式
InputStream is = 类名.class.getResourceAsStream("/Contacts.xml")
Document d = s.read(is);
获得文件对象以后就可以读取信息了,比如调用根元素getRootElement()
Element root = d.getRootElement();
获取根元素以后,我们可以一级一级的获取任意想获取的信息. API如下:
root.getName(); 获取根元素的name
root.getElements(); 如果什么也不填,就返回全部子元素的集合,如果填名字,会返回所有叫这个名字的子元素的集合.
比如获取全部user: root.getElements("user");
对于每个子元素:
子元素.attributeValue("");获取属性值,<user id="1">比如要获取id,里面就填id.
子元素.elementText("");获取文本值,比如XML文件中是 <name>张三</name>,如果入参填写name,就会返回"张三"
子元素.elementTextTrim("");获取文本值并去掉左右空格. 比如XML文件中是 <name>   张三   </name>,如果入参填写name,就会返回"张三"



Xpath
Xpath是基于dom4j的xml查找工具,我们可以通过Xpath快速找到想找到的节点
要使用Xpath,必须要先导入Xpath的jar包,叫做jaxen.jar,添加到依赖库才能使用
Xpath的方法我们主要使用selectNodes();调用必须通过document对象调用,所以还需要获取document对象
SAXReader s = new SAXReader();
InputStream is = 类名.class.getResourceAsStream("/Contacts.xml")
Document d = s.read(is);
获得对象以后可以通过d调方法,返回节点的集合.
d.selectNodes();
主要根据入参不同,搜索方法有四种:
1.绝对路径:   /根元素/子元素/子元素
2.相对路径:   最前面写一个点代表当前主调的路径./子元素/子元素
3.全文检索:    //子元素   //子元素/子元素   //子元素//子元素(两个//代表搜索所有的,一个/代表必须是在一级目录下的)
4.属性查找:   //@属性名   //元素[@属性名]   //元素[@属性名 = 值]


*/


/*
设计模式之工厂模式
我们创建对象时经常自己new对象,但工厂模式是指我们不应该自己new,而是应该找一个工厂给我们制造一个对象.
也就是我们创建一个类,类里面的方法可以帮我们new出对象,这个类就是一个工厂Factory
可以实现解耦,如果要修改new出来的对象,只需要更改工厂的代码即可. 工厂也可以为该对象进行加工和数据注入.
就比如线程池Excutors里的方法,只需要填写一个参数,即可获取一个线程池.


设计模式之装饰模式
创建一个新的类包装原始类,从而在新的类中提升原来类的功能
在不改变原始类的基础上,动态的扩展一个类的功能. 就比如InputStream FileInputStream BufferedInputStream
 */
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值