xml的解析

本文介绍了Java环境下XML的解析方法,包括使用DOM4J库进行XML处理,如selectNodes和selectSingleNode等方法来获取节点,以及XPath的使用技巧,如通过属性值选取元素。同时,强调了Xpath依赖于DOM4J,不能单独导入,并提供了读取配置文件和处理XML的常见场景。
摘要由CSDN通过智能技术生成

思维导图:

 1,java配置

a,配置文件的作用用来维护可能变动的代码(键值对的形式)

将变动的部分做成可配置,就不用改代码,只要改配置文件 

b,读取配置文件:当前类名.class.getResourceAsStream(“资源文件路径”),返回一个流,new 一个properties类或者SAXReader类,用这个类拿到输入流,加载这个流之后键值对的值就存进document对象了,通过键名拿值

c,三种配置位置及读取方式

1,同包

InputStream in = Demo1.class.getResourceAsStream("db.properties");

2,根目录下(源文件夹里)

在"db.properties"前多加了一条"/"

InputStream in = Dome1.class.getResourceAsStream("/db.properties");

3,web-inf下

InputStream in = req.getServletContext().getResourceAsStream("/WEB-INF/db.properties");

d,配置文件放源文件夹作开发,方便管理

WEB-INF:安全目录,凡是放在这个目录下的文件不能直接被外界访问到


Propertiesxml都是资源文件的一种


properties用properties类解析


xml用SAXReader类解析


2,dom4j的使用

selectNodes:获取对应的节点对象,返回list类型

selectSingleNode:获取对应的节点对象,返回单个

 attributeValue:获取指定对象的属性值

getText:拿到元素的值

案例:获取人名(小王)

步骤:1,读取到students.xml的xml串内容


         2,解析获取到的所有students标签的内容


         3,获取到所有students标签的Sid


         4,当Sid=S003时,获取name标签内容

代码如下:

InputStream in = Dome2.class.getResourceAsStream("students.xml");
		
//		Properties pr=new Properties();
//		Document doc=	pr.load(in);
		SAXReader sr=new SAXReader();
		Document doc = sr.read(in);
		List<Element> stuEles = doc.selectNodes("/students/student");
		for (Element stuEle : stuEles) {
			String sid = stuEle.attributeValue("sid");
			if(sid.equals("s003")) {
				Element nameEle =(Element) stuEle.selectSingleNode("name");
				System.out.println(nameEle.getText());
			}

3,xpath的使用

public static void main(String[] args) throws DocumentException {
		InputStream in = Dome3.class.getResourceAsStream("students.xml");
		SAXReader sr=new SAXReader();
		Document doc = sr.read(in);
		Element nameEle = (Element)doc.selectSingleNode("/students/student[@sid='s002']/name");
		System.out.println(nameEle.getText());
	}

 语法: “ / ”定位路径

 “ @  ” 定义属性

ps:

1,Xpath依赖于dom4j,所以不能单独只导一个包

2,element要导org.dom4j包下的

3,强转成document对象

4,拿到元素属性值://*[@id=”xx”]

鼠标右键-->审查元素-->进页面后鼠标右键-->复制-->复制xpath

作业:

	//1获取所有action中所有的type值
		List<Element> selectNodes = doc.selectNodes("/config/action");
		for (Element element : selectNodes) {
			String type = element.attributeValue("type");
			System.out.println("所有action中所有的type值:"+type);
		}
		
		//2.获取第二个action中所有的type值
		
		List<Element> selectNodes2 = doc.selectNodes("/config/action[@path='/loginAction']");
		for (Element element : selectNodes2) {
			String type = element.attributeValue("type");
			System.out.println("获取第二个action中所有的type值:"+type);
		}
		
		//3获取第二个action中所有forward的path
		List<Element> selectNodes4 = doc.selectNodes("/config/action[@path='/loginAction']/forward");
		for (Element element : selectNodes4) {
			String path = element.attributeValue("path");
			System.out.println("第二个action中所有forward的path:"+path);
		}
		
		
		//4获取第二个action中第二个forward的path
		List<Element> selectNodes3 = doc.selectNodes("/config/action[@path='/loginAction']/forward[@name='success']");
		for (Element element : selectNodes3) {
			String path = element.attributeValue("path");
			System.out.println("第二个action中第二个forward的path:"+path);
		}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值