XML基础----dom4j x-path SAX

xml的作用:

1.描述带关系的数据结构(作为软件的配置文件)

2.用于装载数据(作为小型的数据库)

xml语法:

标签:标签名命名规则。一个xml文件有且仅有一个根标签!!!

属性:必须带引号(双引号或者单引号),不能省略引号或不写引号。一个标签内不能出现同名的属 性

文档声明:

versionxml版本号   encoding: 浏览器解析xml时使用的编码

<?xml version="1.0" encoding="UTF-8"?>

 

xml文件中文乱码问题:

1.保存xml文件时的编码(另存为)

2.浏览器解析xml时使用的编码(<?xml encoding="utf-8"?>

以上两个编码必须保持一致!!

XML解析流行解析方式分为DOM4J解析与SAX解析.

使用dom4j

//参数一:指定xml文件的输出位置
        OutputStream out = new FileOutputStream("e:/employee2.xml");
        //参数二:指定xml文件的输出格式
        //OutputFormat format = OutputFormat.createCompactFormat(); //紧凑的格式。去掉空格和换行。给程序上线运行时使用
        OutputFormat format = OutputFormat.createPrettyPrint(); //漂亮的格式。包含空格和换行。给开发者调式时使用
        // 指定输出的编码
        /**
         * 这个设置同时影响了  1)文档声明的encoding属性值   2)xml文件保存的编码
         *     使用这个方法生成的xml文件,不会存在中文乱码问题!!!
         * */
        format.setEncoding("utf-8");
        
        //1.创建写出对象
        XMLWriter writer = new XMLWriter(out,format);
        //2.写出
        writer.write(doc);
        //3、关闭
        writer.close();

获取标签信息

element("标签名"): 获取指定名称的第一个子标签对象

elements(): 获取所有的子标签对象,返回List

elementIterator(): 获取所有的子标签对象,返回Iterator

elements("标签名"): 获取指定名称的所有子标签对象

 

2)获取属性

attributeValue("属性名") : 根据属性名获取当前标签的属性值

attribute("属性名")  :获取指定名称的属性对象,返回Attribute对象

getName(): 属性名   getValue(): 属性值

attributes();  获取当前标签的所有属性对象,返回List

 

3)获取文本

getText(): 获取当前标签的文本

elementText("标签名"): 获取子标签的指定名称的文本

 XPath技术

简介

问题:如果需要选取的节点的层次结构非常深,我们之间通过dom4j去读取这些标签非常麻烦!!

那么如果解决选取层次结构复杂的节点呢?  这就用到了XPath技术!!

 XPath技术是一门快速查询(选取)节点的技术!!

 dom4j如何使用XPath

1.导入xpath的支持

jaxen-1.1-beta-6.jar

2.使用方法

List list = selectNodes("xpath表达式")  选择符合条件的多个节点对象

Element/Attribute/Text node = selectSingleNode("xpath表达式")  选择符合条件的一个节点对

 XPath表达式语法

 /  绝对路径   第一位:代表根标签  后面: 子元素

//              代表选择后代元素(不管层次结构)

*               通配所有标签

[]              带条件选择元素

@              选取属性

text()           选择文本对象

  

 SAX解析工具

Sun公司官方的SAX解析工具。内置在jdk中。org.xml.sax.*

 SAX解析工具使用

1)无需导包

2)编码

2.1 创建SAXParser对象

2.2 parse (  new File("xml文件"),   DefulatHandler的子类 )方法: 解析xml文件

 

DefulatHandler类: SAX解析的事件处理程序类,其中定义的读取XML文档的内容的相关事件触发操作。

startDocument()  加载到文件的开始调用次方法(1次)

startElement()   加载开始标签调用次方法(可能n次)

characters():     加载文本内容调用次方法(可能n次)

endElement()    加载到结束标签调用次方法(可能n次)

endDocument()   加载文件的结束位置调用次方法(1次)

 

   =================    DOM解析    VS        SAX解析  ========

   DOM SAX                             

   原理:一次性加载进内存,占用内容比较大,                加载一点,读取一点,处理一点,释放内存。对内存

不适合读取大容量的文件                                要求比较小

  DOM解析可以读取或修改xml文件                  SAX只能读取xml文件

DOM解析可以任意来回读取xml文件                  SAX是从上往下依次读取,不能往回读

DOM解析面向对象的编程,java开发者来说               基于事件的编程方式,编程方式比较难理解。  

比较容易理解

 

 

posted @ 2016-10-04 21:35  Cool咔咔  阅读(742)  评论(0编辑  收藏  举报