12.7 XML与XML解析(dom4j解析和Xpath解析)

9 篇文章 0 订阅
8 篇文章 0 订阅

xml

可扩展的标记语言,可以用来做文件的存储,或者数据传输。现在基本用作于框架的配置文件,用来做数据的存储。

如何编写xml文件:
1.第一行一定是声明
<?xml version="1.0" encoding="UTF-8"?>
2.根标签只有一个
3.标签名区分大小写
4.标签全部都是成对出现(封闭标签)
5.标签可以自定义
6.注释 <!--  -->
<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book>
		<name>红楼梦</name>
		<author>曹雪芹</author>
		<price>10.00</price>
	</book>
	<book>
		<name>三国演义</name>
		<author>罗贯中</author>
		<price vipPrice="40.00">50.00</price>
	</book>
	<book>
		<name>水浒传</name>
		<author>施耐庵</author>
		<price>30.00</price>
	</book>
	<book>
		<name>西游记</name>
		<author>吴承恩</author>
		<price>30.00</price>
	</book>
</books>

xml解析

对xml文件的内容进行操作的过程
XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。
DOM解析:将整个文件加载到内存中,再一行行进行解析
缺点:占内存,容易产生内存溢出。
SAX解析:为了解决内存溢出,每加载一行解析一行。
缺点:效率低

dom4j解析

dom4j特征:
      1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
      2、它使用接口和抽象基本类方法。
      3、具有性能优异、灵活性好、功能强大和极端易用的特点。
      4、是一个开放源码的文件
因此我们使用dom4j解析xml文件
dom4j 全称document Object Model for java
导包:dom4j-1.6.1.jar
解析方式:
1.获取SAXReader解析器
2.获取整个文档(获取文档对象)
3.先获取根标签
4.然后根据根标签来一层一层的获取其他标签
例子

package com.bucishu.xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class parseXmlDemo {
	public static void main(String[] args) throws DocumentException{
		// 获取解析器
		SAXReader saxReader = new SAXReader();
		//(获取文档对象)
		Document read = saxReader.read("src/books.xml");
		System.out.println(read);
		//获取跟标签
		Element rootElement = read.getRootElement();
	}
}
package com.bucishu.xml;

import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class parseXmlDemo02 {
static Document read=null;
static Element rootElement=null;
static{
	SAXReader saxReader = new SAXReader();
	try {
		 read = saxReader.read("src/books.xml");
	     rootElement = read.getRootElement();
	} catch (DocumentException e) {
		e.printStackTrace();
	}
}
	public static void main(String[] args) throws DocumentException{
		test1();
		test2();
	}
	private static void test1() {
		//获取第一本书的价格
		List<Element> list = rootElement.elements("book");
		Element element = list.get(0);
		Element element2 = element.element("author");
		//获取标签内容
		String text = element2.getText();
		System.out.println(text);
	}
	public static void test2() {
		List<Element> list = rootElement.elements("book");
		Element element3 = list.get(1);
		Element e = element3.element("price");
		Attribute attribute = e.attribute("vipPrice");
		String value = attribute.getValue();
		System.out.println(value);
	}
}

Xpath解析

通过以上操作发现,也比较麻烦。因此采用xpath路径查询方式
List d.selectNodes(String xpath); 复数,适用于多个标签的操作
Node d.selectSingleNode(String xpath) 当个标签操作
导包:jaxen-1.1.2.jar
不辞树
不辞树
不辞树
不辞树
不辞树

public static void test3(){
		Node node = d.selectSingleNode("/books/book[1]/description");
		String text = node.getText();
		System.out.println(text);
	}
	//获取vipPrice的值
	public static void test4(){
		Element node =(Element)d.selectSingleNode("//*[@vipPrice]");
		String value = node.attributeValue("vipPrice");
		System.out.println(value);
	}
    //查询books.xml中的所有标签名
	public static void test5(){
		List<Node> list = d.selectNodes("//*");
		for(Node n:list){
			System.out.println(n.getName());
		}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值