700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java-使用Dom4j解析xml文档

Java-使用Dom4j解析xml文档

时间:2024-02-17 15:46:29

相关推荐

Java-使用Dom4j解析xml文档

1. xml介绍

可扩展的标记性语言

2. 作用

存储数据可以作为项目的配置文件作为网络传输数据的格式(现在一般以json为主)

3. 语法注意事项

语法与HTML类似一定要有开头的xml声明标签名称不可以有空格所有的xml标签必须要有闭合标签对大小写敏感必须有根元素特殊字符: >< CDATA区(文本区域) CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析 <![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>

4. xml文本示例

<?xml version="1.0" encoding="utf-8" ?><!--<?xml version="1.0" encoding="utf-8" ?>以上内容是xml的声明,说明这是一个xml文件- version表示本身- encoding表示xml文件的编码方式- 格式要求很严格,一点都不可以错--><books><book sn="001"> <!-- sn是book的属性 --><name>时间简史</name><author>霍金</author><price>26.9</price></book><book sn="002"><name>你好</name><author>作者2</author><price>269</price></book><![CDATA[<book sn="002"><name>你好</name><author>作者2</author><price>269</price></book>这里是文本内容,不会被解析]]></books>

5. Java对xml解析技术的介绍

不管是 html 文件还是 xml 文件,它们都是标记型文件,均可使用 w3c 组织制定的 dom 技术来解析早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax【已经过时】 dom 解析技术是 W3C 组织制定的,所有的编程语言都对这个解析技术使用了自己语言的特点进行实现, Java 对 dom 技术解析标记也做了实现sun 公司在 JDK5 版本对 dom 解析技术进行升级,SAX 解析 之后又延申出的第三方解析 jdom解析:在 dom 基础上进行了封装dom4j解析: 又对 jdom 进行了封装【主要使用的解析方式】pull 主要用在 Android 手机开发 核心:DOM解析是本质【个人认为】Dom4j 是第三方的解析技术,需要使用第三方给我们提供好的类库才可以解析 xml 文件

6. Dom4j类库的介绍

先得到一个zip压缩包解压后,得到一个文件夹dom4j-1.6.1,文件夹的主要内容有 docs:里面有很多html文件,其中一个index.html文件,是dom4j的使用文档lib:存放了dom4j的依赖包src:存放了dom4j依赖包的源码dom4j-1.6.1.jar:这个jar包就是我们要用的项目里面的依赖包 在项目中新建一个目录,一般取名为lib将dom4j-1.6.1.jar复制到lib下之后将lib目录添加为库之后就可以正常使用dom4j了

7. 简单使用

@Testpublic void test1() throws Exception {// 1. 创建一个 SAXReader输入流SAXReader reader = new SAXReader();// 2. 使用输入流读取xml文件,生成Document对象// -- 这里的是相对路径// -- 当前所在路径与项目的src同级Document document = reader.read("./xml/books.xml"); // 3. 现在已经获得了xml文件的Java对象——document}

8. 基于Element的层级关系获取元素

@Testpublic void test2() throws Exception {// 1. 读取,生成Document对象SAXReader reader = new SAXReader();Document document = reader.read("./xml/books.xml");// 2. 获取根元素Element root = document.getRootElement();// 3. Element.asXML()// -- 将当前元素转换成为格式化过的 String 对象// -- 一般用来调试代码使用,查看是否正确获取到结果System.out.println(root.asXML());// 4. Element.element(标签名)// -- 获取当前元素下面的一个指定元素// -- 返回的是第一个符合的Element ele = root.element("book");// 5. Element.getText()【待测】// -- 获取当前标签的文本内容// -- 如果当前元素下面 没有其他标签, 只有文本内容, 只获取文本// -- 如果当前元素下面 既有标签, 又有文本内容, 只获取文本// -- 如果当前元素下面 只有标签, 没有文本内容, 什么都获取不到// -- 如果当前元素下面 即没有标签, 也没有文本内容, 什么都获取不到System.out.println(ele.getText());// 6. Element.elements(标签名)// -- 获取当前元素下面的指定元素的集合// -- 返回List<Element>List<Element> list = root.elements("book");for (Element e : list) {System.out.println("===============================");System.out.println(e);System.out.println(e.element("name").getText());System.out.println(e.element("author").getText());System.out.println(e.element("price").getText());}}

9. 基于Node的xpath获取元素

需要使用xpath进行解析,需要额外jaxen包的依赖支持如果xpath语法不了解的话,可以参考我写的另一篇博文Python-xpath与bs4,虽然是用Python写的,但是xpath的语法是一样的

@Testpublic void test3() throws Exception {// 1. 读取,生成Document对象SAXReader reader = new SAXReader();Document document = reader.read("./xml/books.xml");// 2. 返回单个元素是NodeNode node = document.selectSingleNode("/books/book[2]/author");System.out.println(node.getText());// 3. 返回多个元素是List<Node>List<Node> list = document.selectNodes( "//name" );for (Node n:list) {// 4. 获取元素的文本是:Node.getText()System.out.println(n.getText());}}

10. 两个jar包

下载地址如下,自提

jaxen-1.1.2.jar:提取码bugudom4j-1.6.1.jar:提取码bugu

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。