dom4j+Xpath解析XML文件

XML作用及存放位置

xml的具体作用有两种:
1.数据交互【主要有三种1.XML,2.WEBService,3.json(XML 基本淘汰,一般用json)】

2.做配置 表现形式为:

<config>
<action name=" " type=" ">
<forward result=''xx">/xxx.jsp</forward>
</action>

</config>

存放位置
存放位置
1.src根目录下 2.与读取配置文件的类在同包 3.WEB-INF(或其子目录下)

XML与json交互

XML的交互形式:

对象形式:<person>
<id>1</id>
<name>zs</name>
<sex>nv</sex>
</person>

数组形式:
<persons>
<person>
<id>1</id>
<name>zs</name>
<sex>nv</sex>
</person>
<person>
<id>2</id>
<name>zs2</name>
<sex>nan</sex>
</person>
</persons>

json交互形式:

json:对象形式:{id:1,name:'zs',sex:'nv'}
json数组形式:【{id:1,name:'zs',sex:'nv'}{id:2,name:'ls',sex:'name'}】
混合对象(数组内嵌对象):【{id:1,name:'zs',sex:'nv',children:{
{id:3,name:'zw',sex:'nan'}
}}{id:2,name:'ls',sex:'name'}】
混合对象(对象内嵌数组)
{id:1,name:'zs',sex:'nv',children:{
[{id:3,name:'zw',sex:'nan'},{id:2,name:'ls',sex:'name'}]
}}

解析XML

这里XML解析分为dom4jXpath解析

dom4j+xPath解析XML文件
XPath:等同于数据库中的select语句
dom4j:java语言专门提供的一个程序,用来解析XML
语句:
document.selectNodes(XPath);//查一组(用list集合接收在遍历输出)
document.selectSingleNode(XPath);//查单个

DOM由节点组成
1.元素节点(相当于一个标签,具体如下面代码,红色代表*元素节点*,黑色代表*属性节点*,绿色代表*文本节点*)
2.属性节点
3.文本节点

在这里插入图片描述

dom4j解析XML

下面将用dom4j解析上图的student.xml文件:
如果我们要得到上图name=“小王”,sid="s003"的学生信息步骤代码如下:

/**
 * 
 */
package com.zyang;

import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
/**
 * dom4j+XPath解析xml
 * @author SHE
 *
 * 2020年5月20日下午9:12:42
 *  com.zyang
 *  具体步骤:
 *  1.加载文件
 *  2.解析得到所有的student
 *  3.遍历得到每一个student标签xml类容
 *  4.判断student的sid是否是003
 *  5.如果是将进一步解析该student下的子标签name
 *  6.打印name 与 sid值
 */
public class Demo4 {
	public static void main(String[] args) throws Exception {
		//1.获取到带解析文件
		//2.利用Dom4j进行解析
		InputStream is = Demo4.class.getResourceAsStream("/students.xml");
		//dom4j读取类
		SAXReader reader = new SAXReader();
		//开始读取
         Document doc = reader.read(is);
		//得到students文件下的所有student(使用list集合装起来)
		List<Element> stueles = doc.selectNodes("/students/student");
		//fore遍历输出
		for (Element stuele : stueles) {
			//找到sid等于s003的元素节点
			if("s003".equals(stuele.attributeValue("sid"))) {
				//得到该元素节点下的name
				Node nd = stuele.selectSingleNode("name");
				//输出sid和name的值
				System.out.println("sid="+stuele.attributeValue("sid")+","+"name="+nd.getText());
			}
		}
	}
	

}

运行结果:
在这里插入图片描述

XPath解析XML

下面将用Xpath解析上述文件:

/**
 * 
 */
package com.zyang;

import java.io.InputStream;
import java.util.List;

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

/**
 * XPath解析
 * @author SHE
 *
 * 2020年5月20日下午9:57:20
 *  com.zyang
 */
public class Demo5 {
	public static void main(String[] args) throws Exception {
		
		//1.获取到带解析文件
		//2.利用Dom4j进行解析
		InputStream is = Demo4.class.getResourceAsStream("/students.xml");
		//dom4j读取类
		SAXReader reader = new SAXReader();
		//开始读取
		Document doc = reader.read(is);
		//直接获取到sid为003的元素节点
		Element elems= (Element) doc.selectSingleNode("/students/student[@sid='s003']");
		//获取到该节点下的name
		Element elem= (Element)elems.selectSingleNode("name");
		//输出
		System.out.println("sid="+elems.attributeValue("sid")+","+"name="+elem.getText());	
	}
}

运行结果:
在这里插入图片描述
其中Xpath直接跳过找所有元素节点和判断sid个人感觉XPath比dom4j简便快捷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值