欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

xml解析及dom4j+xpath解析

程序员文章站 2022-06-07 14:15:14
...

java配置文件的三种配置方法及读取

通过db.properties获取uname和upass值
xml解析及dom4j+xpath解析

三种配置

1.配置在src根目录下,如图所示:

xml解析及dom4j+xpath解析
实现代码如下:

加载根路径下的资源文件db.properties文件,到jvm称为流对象
//  "/" 代表的是跟路径--》src就是根路径    source folder--》物理将代码分层,jvm不会读取这个文件夹
  InputStream in = Demo1.class.getResourceAsStream("/db.properties");
//  Java.utils.properties
  Properties p= new  Properties();
//  此时p中就加载了流对象,从而就拥有了该资源文件的所有配置信息
  p.load(in);
  System.out.println(p.getProperty("uname"));
  System.out.println(p.getProperty("upass"));

类名.Class.getResourceAsStream这个方法具有容错性,它包容错误不暴露出来
运行结果:
xml解析及dom4j+xpath解析

2.读取同包下的文件

实现代码:

InputStream in = Demo1.class.getResourceAsStream("db.properties");
//  Java。utils。properties
  Properties p= new  Properties();
//  此时p中就加载了流对象,从而就拥有了该资源文件的所有配置信息
  p.load(in);
  System.out.println(p.getProperty("uname"));
  System.out.println(p.getProperty("upass"));

在同包下的运行结果:
xml解析及dom4j+xpath解析

如果同包下不存在db.properties,不报错,睁一只眼闭一只眼
不在同包下的运行结果:
xml解析及dom4j+xpath解析

3.WEB-INF(或其子目录下)

实现代码如下:

//获取上下文
  ServletContext context = req.getServletContext();
//  获取web-inf下的db.properties
  InputStream in = context.getResourceAsStream("/WEB-INF/db.properties");
  Properties p= new  Properties();
//  此时p中就加载了流对象,从而就拥有了该资源文件的所有配置信息
  p.load(in);
  System.out.println(p.getProperty("uname"));
  System.out.println(p.getProperty("upass"));

运行结果:
xml解析及dom4j+xpath解析

dom4j解析

首先通过demo4j获取到名字为小芳,id=s002的学生信息,然后在控制台进行打印
xml解析及dom4j+xpath解析
实现步骤分析:
1、获取解析文件

InputStream in = Demo3.class.getResourceAsStream("/students.xml");
SAXReader reader=new SAXReader();
Document doc = reader.read(in);

2、解析得到所有的student标签

//这是得到所有students标签
System.out.println(doc.asXML());

3、遍历得到每一个student标签xml内容

List<Element> stuEle=doc.selectNodes("/students/student");
  for(Element stuEles:stuEle) {
    System.out.println(stuEles.asXML());
    System.out.println("~~~~~~~~~~~~~~~~~~");
   }

4、判断该student的sid是否是s002

List<Element> stuEle=doc.selectNodes("/students/student");
  for(Element stuEles:stuEle) {
   if("s002".equals(stuEles.attributeValue("sid"))) {
    System.out.println(stuEles.asXML());
    System.out.println("~~~~~~~~~~~~~~~~~~"); 
   }

5、获取student下的name值

List<Element> stuEle=doc.selectNodes("/students/student");
  for(Element stuEles:stuEle) {
   if("s002".equals(stuEles.attributeValue("sid"))) {
   //    这是得到s002下的name值
    Element nameEle=(Element) stuEles.selectSingleNode("name");
    System.out.println(nameEle.asXML());

   }

6、一并打印sid以及name值

List<Element> stuEle=doc.selectNodes("/students/student");
  for(Element stuEles:stuEle) {
   if("s002".equals(stuEles.attributeValue("sid"))) {
   //    这是得到s002下的name值
    Element nameEle=(Element) stuEles.selectSingleNode("name");
//    打印sid以及name值
System.out.println("sid="+stuEles.attributeValue("sid")+",name="+nameEle.getText());
    
   }

运行结果:xml解析及dom4j+xpath解析

xpath解析

实现步骤分析:

1、获取解析文件
2、判断该student的sid是否是s002
3、获取student下的name值
4、一并打印sid以及name值
如图所示:
xml解析及dom4j+xpath解析

总结

本人觉得用xpath解析比较方便一些,它的代码少一些,不用像dom4j那样去判断了

相关标签: 代码 笔记