XML解析

XML解析

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

  • 读同级目录下的配置文件
    在这里插入图片描述
    代码如下:
package com.su;

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

/**
 * 
 * 读同级目录下的配置文件
 * 
 * */
public class Demo2{
	public static void main(String[] args) throws IOException {
		InputStream in= Demo1.class.getResourceAsStream("db.properties");
		Properties p=new Properties();
		p.load(in);
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upass"));
	}
}

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

  • 读取项目目录下的配置文件
    在这里插入图片描述
    代码如下:
package com.su;

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

/**
 * 
 * 读同级目录下的配置文件
 * 
 * */
public class Demo1 {
	public static void main(String[] args) throws IOException {
		InputStream in= Demo1.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前面加了"/"
运行结果:
在这里插入图片描述

  • WEB-INF(或其子目录下)

在这里插入图片描述
代码如下:

package com.su;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo3 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 {
		InputStream is=req.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
		 Properties p=new Properties();
		// 将读取的配置文件对应的流对象给Properties进行管理
		  p.load(is);
		  System.out.println(p.getProperty("uname"));
		  System.out.println(p.getProperty("upass"));
	}
	
}

运行结果:
在这里插入图片描述
2.XML的作用

  • 数据交换
  • Web服务
  • 内容管理
  • Web集成
  • 配制

3.dom4j+xpath解析xml文件
首先要导入两个架包
在这里插入图片描述
student.xml文件
在这里插入图片描述
代码如下:

package com.su;

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

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Demo4 {
  public static void main(String[] args) throws Exception {
	InputStream in=Demo4.class.getResourceAsStream("students.xml");
	SAXReader reader=new SAXReader();
	//将配置文件xml内容加载进内存
	Document doc=reader.read(in);
	System.out.println(doc.asXML());
    }
}

运行结果:
在这里插入图片描述
精确的找到每一个标签下的元素
代码如下:

package com.su;

import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
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("students.xml");
	SAXReader reader=new SAXReader();
	//将配置文件xml内容加载进内存
	Document doc=reader.read(in);
//	System.out.println(doc.asXML());
	  
	  //第一种:八爪鱼(按照查找目录的方式去查找xml,容类)
	  List<Element> stuEles=doc.selectNodes("/students/student");
		for (Element stuEles1: stuEles) {
//			System.out.println(stuEles.asXML());
//			获取sid 的属性值 与 s002进行对比,如果是就取出name 标签的值
			if("s002".equals(stuEles1.attributeValue("sid"))) {
			Element nameEle=(Element) stuEles1.selectSingleNode("name");
			//得到<name>小芳</name>
			System.out.println(nameEle.asXML());
			//获取标签内部的文本类容
			System.out.println(nameEle.getText());
			}
		}
		
//		第二种
		  Node stu002Ele=doc.selectSingleNode("/students/student[@sid='s002']");
		  Element nameEle=(Element) stu002Ele.selectSingleNode("name");
		  System.out.println(nameEle.getText());

    }
}

运行结果:
在这里插入图片描述
结论:得出的结果相同,对比两种方式代码量的多少显然第二种更简洁

4.config.xml解析
1、获取所有action中的type的值
2、获取第二个action中的type的值
3、获取第二个action的所有forward的path
4、获取第二个action的第二个forward的path
在这里插入图片描述
代码如下:

package com.su;

import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader; 


public class Demo5 {
  public static void main(String[] args) throws Exception {
	InputStream in=Demo5.class.getResourceAsStream("config.xml");
	SAXReader reader=new SAXReader();
	//将配置文件xml内容加载进内存
	Document doc=reader.read(in);
//	System.out.println(doc.asXML());
	
	      //获取所有action中的type的值
		  List<Element> conf=doc.selectNodes("config/action");
		  for (Element element : conf) {
			System.out.println(element.attributeValue("type"));
		}
		  
//			2、获取第二个action中的type的值
			List<Element> conf1= doc.selectNodes("/config/action[@path='/loginAction']");
			for (Element element2 : conf1) {
				System.out.println(element2.attributeValue("type"));
			}
		  
		  //获取第二个action的所有forward的path
			List<Element> conf11= doc.selectNodes("/config/action[@path='/loginAction']/forward");
			for (Element element3 : conf11) {
				System.out.println(element3.attributeValue("path"));
			}
			
			//获取第二个action的第二个forward的path
			List<Element> conf111= doc.selectNodes("/config/action[@path='/loginAction']/forward[@name='success']");
			for (Element element4 : conf111) {
				System.out.println(element4.attributeValue("path"));
			}
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值