XML解析

1. Java中配置文件的三种配置位置及读取方式
1.1(同目录同包下如何获取配置文件内容)
代码如下:

package lixiang_XML;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Demo {
public static void main(String[] args) throws Exception {
//	读取同级目录下的配置文件
	InputStream in=Demo.class.getResourceAsStream("db.properties");
	Properties p=new Properties();
//	将读取的配置文件对应的流对象交给Properties进行管理
	p.load(in);
	System.out.println(p.getProperty("uname"));
	System.out.println(p.getProperty("upass"));
}
}

运行结果:
在这里插入图片描述
假如配置文件不在同一包的话会出现的问题:
在这里插入图片描述
他会运行空指针异常的错误。
1.2(与读取配置文件的类在不同包)
代码如图:

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

public class Demo1 {
public static void main(String[] args) throws Exception {
//	读取同级目录下的配置文件
	InputStream in=Demo1.class.getResourceAsStream("db.properties");
	Properties p=new Properties();
//	将读取的配置文件对应的流对象交给Properties进行管理
	p.load(in);
	System.out.println(p.getProperty("uname"));
	System.out.println(p.getProperty("upass"));
}
}

运行后的结果:
在这里插入图片描述
如图获取到了他里面的值。

1.3(配置文件处于WEB-INF目录时该怎样获取文件夹的内容)
代码如下:

package lixiang_XML;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
	@WebServlet("/demo3")
	public class DemoServlet 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 {
//			获取web-inf下的配置文件
		InputStream in=	req.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
		Properties p=new Properties();
//		将读取的配置文件对应的流对象交给Properties进行管理
		p.load(in);
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upass"));
		}
	}

输出的结果:
在这里插入图片描述

dom4j+xpath解析xml文件
代码如下:
准备一个Task.XML文件

<?xml version="1.0" encoding="UTF-8"?>
	<Task>
		<student sid="s001">
			<name>小明</name>
		</student>
		<student sid="s002">
			<name>小芳</name>
		</student>
		<student sid='s003'>
			<name>小王</name>
		</student>
	</Task>

导入两个架包
在这里插入图片描述

package lixiang_XML;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Demo4 {
	public static void main(String[] args) throws Exception{
		InputStream in=Demo4.class.getResourceAsStream("Task.xml");
		SAXReader reader=new SAXReader();
//		将配置文件xml内容加载进内存
		Document doc= reader.read(in);
		System.out.println(doc.asXML());
//		xpath  八爪鱼      按照查找目录的方式去查找zml内容
//		List<Element> stuEles=doc.selectNodes("/Task/student");
//		for (Element stuEle : stuEles) {
			System.out.println(stuEle.asXML());
			获取sid的属性与s002进行对比,如果是那么就取出name标签对应的值
//			if("s002".equals(stuEle.attributeValue("sid"))) {
//			Element nameEle=(Element)stuEle.selectSingleNode("name");
			System.out.println(nameEle.asXML());
			获取标签内部的文本内容
//			System.out.println(nameEle.getText());
//			}
//		}
		Element stuEle002 =(Element) doc.selectSingleNode("/Task/student[@sid='s002']");
		System.out.println(stuEle002.asXML());
		Element nameEle=(Element)stuEle002.selectSingleNode("name");
	    System.out.println(nameEle.asXML());
	    System.out.println(nameEle.getText());
	}
}

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

config.xml实例
1、获取所有action中的type的值
2、获取第二个action中的type的值
3、获取第二个action的所有forward的path
4、获取第二个action的第二个forward的path

package lixiang_XML;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Demo3 {
	public static void main(String[] args) throws Exception{
//		读取同级目录的配置文件
		InputStream in=Demo3.class.getResourceAsStream("conf.xml");
		SAXReader reader=new SAXReader();
		Document doc=reader.read(in);
//		1、获取所有action中的type的值
		List<Element> stuEles=doc.selectNodes("/conf/action");
		for (Element element : stuEles) {
			System.out.println("1、获取所有action中的type的值"+element.attributeValue("type"));
//			2、获取第二个action中的type的值
			if("/loginAction".equals(element.attributeValue("path"))) {
				System.out.println("2、获取第二个action中的type的值"+element.attributeValue("type"));
			}
		}
		List<Element> foeEle=doc.selectNodes("/conf/action[@type='test.LoginAction']/forward");
		for (Element element : foeEle) {
//			3、获取第二个action的所有forward的path
			System.out.println("3、获取第二个action的所有forward的path"+element.attributeValue("path"));
//			4、获取第二个action的第二个forward的pat
			if("success".equals(element.attributeValue("name"))) {
				System.out.println("4、获取第二个action的第二个forward的pat"+element.attributeValue("path"));
			} 
		}		
	}
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值