/* 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文件因为使用其特殊语法,比如<>一般作为标签出现,经常会和要写的内容冲突.所以当我们真正需要写这几个符号的时候,我们可以按照如下规则转译: < < 小于 > > 大于 & & 和号 ' ' 单引号 " " 引号 比如在XML文件里写 age > 18,我们需要写 age > 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 */
9.18xml,xpath,dom4j
最新推荐文章于 2024-10-31 21:56:54 发布