xml解析

博客介绍了Java中配置文件的三种配置位置及读取方式,包括同包下、根目录和WEB - INF下。阐述了XML在配置和数据交换方面的作用,还重点讲解了dom4j+xpath解析xml文件的方法,给出了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Java中配置文件的三种配置位置及读取方式

Java中,配置文件可以存放在三个位置。
1、同包下的资源文件读取
将当前类同包下的db.properties资源文件转换成输入流

InputStream in = PropertiesDemo.class.getResourceAsStream("db.properties");
Properties p = new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));

注:db.properties是资源文件,内容如下:
在这里插入图片描述
通过上面的获取uname与upass,我们成功的取到了两个值
在这里插入图片描述
2、将所有的资源文件放到根目录下

InputStream in = PropertiesDemo.class.getResourceAsStream("/db.properties");
Properties p = new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));

跟第一点中相比,多了个“/”,斜杆“/”代表根目录,当然结果都是一样的,但是这样方便了很多,编译后所有的资源文件都会自动进WEB-INF下,所以第三种方式又比第二种要方便,就看你们习惯哪一种了。

3、直接将资源文件放到web-inf下

public class PropertiesServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		ServletContext context = req.getServletContext();
		InputStream in = context.getResourceAsStream("/WEB-INF/db.properties");
		Properties p = new Properties();
		p.load(in);
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upass"));
	}
}

这一种就是直接把资源文件放到WEB-INF中,当然直接放到WEB-INF中是有点好处的,WEB-INF也是安全目录,其含义就是不能被外界访问。结果与第一种一样

二、 XML的作用

配置

*.properties
*.xml

注:*.properties文件
key=value

数据交换

xml
webservice
json

三、dom4j+xpath解析xml文件

properties文件的解析方式有java.util.properties这个类来完成
xml文件:应该有一个工具类来完成

解析方式也分为三种:

jdk/jdom
sax解析 由上往下解析
dom4j解析 由外到内解析

我们今天就来用dom4j+xpath来解析xml文件。注:xpath等同数据库的select语句

document.selectNodes(xpath);//查一组
document.selectSingleNode(xpath);//查单个

DOM由节点组成
Node
元素节点
属性节点
文本节点

xpath
/ 定位路径 在系统中建一个文件叫document/students/student/sid|name
@ 属性
students.xml中内容
我们要解析的就是students.xml,我们要在这里面解析出“小王”这个名字
在这里插入图片描述
代码如下:

	public static void main(String[] args) throws DocumentException {
	InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");
	SAXReader saxreader = new SAXReader();
	Document doc = saxreader.read(in);
	System.out.println(doc.asXML());
	//1、获取到所有的学生
	List<Element> stuEles = doc.selectNodes("/students/student");
	//2、遍历
	for (Element stuEle : stuEles) {
		if("s003".equals(stuEle.attributeValue("sid"))) {
			Element nameEle = (Element) stuEle.selectSingleNode("name");
			System.out.println(nameEle.getText());
		}
	}
}

当然还有种容易点的查找方式,

public static void main(String[] args) throws DocumentException {
	InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");
	SAXReader saxreader = new SAXReader();
	Document doc = saxreader.read(in);
	//3、做判断、如果sid=s003那么拿到小王
	Element stuEleS003 = (Element) doc.selectSingleNode("/students/student[@sid='s003']");
	System.out.println(stuEleS003.selectSingleNode("name").getText());
	}

这一些代码与上面一样,都可以找到“小王”这个学生
输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值