【XML】解析

1. Java中配置文件的三种配置位置及读取方式

方法一
这是需要读取出来的代码
在这里插入图片描述
读取后【这种方法不常用】
在这里插入图片描述

1.1 XML和*.properties(属性文件)
存放位置: 它在src根目录下

 Xxx.class.getResourceAsStream("/config.properties");

与读取配置文件的类在同一包

Xxx.class.getResourceAsStream("config2.properties");
package parse;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 各个位置下的资源文件(properties、xml结尾的文件)的读取方式
 * 1、同包下的资源文件读取
 * 2、将所有的资源文件放在根目录下
 * 		编译后所有的资源文件都会自动进WEB-INF下【一般开发用这种】
 * 3、直接将资源文件放到web-inf下
 * @author zhouyanpeng
 * 第一种方法 很少用
 */
public class PropertiesDemo {
	public static void main(String[] args) throws IOException {
		//将当前类同包下的db.properties资源文件转换成输入流
		//斜杠代表根目录
		InputStream in = PropertiesDemo.class.getResourceAsStream("/db.properties");
		Properties p = new Properties();
		p.load(in);
		//未获取到则返回null
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upass"));
	}
}

WEB-INF(或其子目录下)

ServletContext application = this.getServletContext();
InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");

这种方法必须写Servlet并配置才行

public class PropertiesServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
	@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"));
	}
}

配置
在这里插入图片描述

tomcat服务器文件夹含义

//bin 放命令的
//config	放tomcat服务配置的
//work	临时文件
//webapp	发布项目的目录
//web-inf 安全目录	含义:不能被外界访问
//log	日志

资源文件
凡是以propertiesj或以xml结尾的都是资源文件【xml同时也是配置文件】,或一切静态文件都是资源文件。
常见的资源文件
.properties和.xml
静态资源文件
css、js、html、图片、视频
properties文件的解析方式有java.util.properties这个类来完成
xml文件:应该有一个工具类来完成
jdk/jdom
sax解析 由上往下解析
dom4j解析 由外到内解析
dom节点

<html>
	<body>
		<div id="head"></div>
		<div id="content"><
			xxxx
			<div></div>
		/div>
	</body>
</html>
<http></http><body></body><div></div>这些就是节点了

2. XML的作用

程序之间的数据传输通讯 程序之间的数据传输通讯
PHP语言 <- 快递100 <- Java语言
配置文件 配置文件config.xml
存储数据,充当小型数据库 存储数据,充当小型数据库
规范数据格式 规范数据格式,是数据具有结构性,易读易处理 是数据具有结构性,易读易处理

3. dom4j+xpath解析xml文件

xpath等同数据库的select语句

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

xml可以作为数据传输
每一个接口传输的xml节点及节点内容都不相同,那么对应的解析方式是不是应该写很多个呢?
思考一个xml解析方法解析多种格式的文件
反向思考,将数据库查出来的任意类型的集合转成对应的xml格式字符串。
DOM由节点组成
Node
元素节点
属性节点
文本节点

xpath
/ 定位路径 在系统中建一个文件叫document/students/student/sid|name
@ 属性
students.xml

获取小王
在这里插入图片描述
方法一

public class XmlParseDemo {
	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.asXML());
//				System.out.println(nameEle.getText());
//			}
//		}
//		3.做判断、如果sid=s003那么拿到小王
		Element stuEleS003 = (Element)doc.selectSingleNode("students/student[@sid='s003']");
		System.out.println(stuEleS003.selectSingleNode("name").getText());
	}
}

方法二

InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");
	SAXReader saxReader = new SAXReader();
	Document doc = saxReader.read(in);
	Element stuEleS003 = (Element)doc.selectSingleNode("students/student[@sid='s003']");
	System.out.println(stuEleS003.selectSingleNode("name").getText());

这种较为简单,但要明确知道文件位置
想要了解更多,联系博主。

猜你喜欢

转载自blog.csdn.net/zyp_baoku/article/details/90573376