XML解析

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

1.1 存放在同目录下.如图(读取wangcong.xml里面的db.properties)
在这里插入图片描述
例如:先写一个文件(如db.properties),内容如下:

uname=onlyK
upass=wangcong
url=jdbc:mysql://localhost:3306/mybatis_ssm
driver_Class=com.mysql.jdbc.Driver

initPoolSize=5
maxPoolSize=20

再编写一个java文件Test1去读取信息:

package wangcong.xml;

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

/**
 * 读取同级目录下的配置文件
 * 	(xml、properties、vm....)
 * @author only老K
 *
 */
public class Test1 {
public static void main(String[] args) throws Exception {
	//读取同级目录下的配置文件(例如db.properties)
	InputStream in = Test1.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与读取配置文件的类在同一包.如图(读取conf下面db.properties)
在这里插入图片描述

编写一个新的java文件Test2,如下

package wangcong.xml;

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

/**
 * 读取项目根路径下的配置文件
 * @author only老K
 * 需在要读取的文件前面假一个/如下
 */
public class Test2 {
public static void main(String[] args) throws Exception {
	InputStream in = Test2.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(或其子目录下)***(读取WEB-INF里面的db.properties)
在这里插入图片描述

1.3.1 首先WEB-INF文件是干什么?
安全目录 含义:不能被外界访问

1.3.2 获取内容。如下代码:

package wangcong.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;
/**
 * 获取web_inf下面的配置文件db.properties
 * @author only老K
 *
 */
@WebServlet("/demo3")//配置Servlet
public class Test3Servlet 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 in = req.getServletContext().getResourceAsStream("/WEB-INF/db.properties");//获取流。内容意思是先返回上一级再进入到WEB-INF里面去取
		Properties p=new Properties();//创建管理对象
		//将读取的配置文件对应的流对象交给Properties进行管理
		p.load(in);//这里需要抛出异常
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upass"));
	}
}

运行结果如下:(需要运行服务)
在这里插入图片描述

2.XML的作用

首先做配置,然后在2016年之前还会用来做数据交互。(重点是学会解析别人发过来的xml文件)

3. dom4j+xpath解析xml文件(划重点)如图:

在这里插入图片描述
3.1 准备工作,先写好student.xml文件。如下:

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

3.2 导入2个jar包。如图:
在这里插入图片描述
再编写一个java文件Test4。如下:

package wangcong.xml;

import java.io.InputStream;

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

/**
 * 讲解如何解析xml从中获取我们想要得到的内容
 * @author only老K
 * xml解析技术: dom4j、sax解析、jdom解析
 * 重点是dom4j,后两种已经慢慢被淘汰
 * 
 */
public class Test4 {
public static void main(String[] args) throws Exception {
	InputStream in = Test4.class.getResourceAsStream("students.xml");
    SAXReader reader = new SAXReader();//dom4j的
    //将配置文件xml内容加载到了内存中
    Document doc=reader.read(in);//dom4j的,抛出异常
    System.out.println(doc.asXML());
}
}

运行结果如下:

在这里插入图片描述
例如:我需要获取到小芳。运行如下代码:
第一种方法:
1. 先得到所有的student元素

package wangcong.xml;

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

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

/**
 * 讲解如何解析xml从中获取我们想要得到的内容
 * @author only老K
 * xml解析技术: dom4j、sax解析、jdom解析
 * 重点是dom4j,后两种已经慢慢被淘汰
 * 
 */
public class Test4 {
public static void main(String[] args) throws Exception {
	InputStream in = Test4.class.getResourceAsStream("students.xml");
    SAXReader reader = new SAXReader();//dom4j的
    //将配置文件xml内容加载到了内存中
    Document doc=reader.read(in);//dom4j的,抛出异常
    //System.out.println(doc.asXML());
    List<Element> stuEles=doc.selectNodes("/students/student");//得到所以的student元素
    for (Element e : stuEles) {
		System.out.println(e.asXML());
	}
}
}

运行结果如下:
在这里插入图片描述
2.判断是否是sid=“s002”,并得到sid=“s002”内的元素, 如下代码:

package wangcong.xml;

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

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

/**
 * 讲解如何解析xml从中获取我们想要得到的内容
 * @author only老K
 * xml解析技术: dom4j、sax解析、jdom解析
 * 重点是dom4j,后两种已经慢慢被淘汰
 * 
 */
public class Test4 {
public static void main(String[] args) throws Exception {
	InputStream in = Test4.class.getResourceAsStream("students.xml");
    SAXReader reader = new SAXReader();//dom4j的
    //将配置文件xml内容加载到了内存中
    Document doc=reader.read(in);//dom4j的,抛出异常
    //System.out.println(doc.asXML());
    List<Element> stuEles=doc.selectNodes("/students/student");//得到所以的student元素
    for (Element e : stuEles) {
		//System.out.println(e.asXML());
    	if("s002".equals(e.attributeValue("sid"))) {//得到每个sid的内容
    		Element nameE=(Element) e.selectSingleNode("name");//得到满足sid="s002"的元素name
    		System.out.println(nameE.asXML());
    	}
	}
}
}

运行结构果如下:
在这里插入图片描述
3.获取标签内的文本内容,代码如下:

package wangcong.xml;

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

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

/**
 * 讲解如何解析xml从中获取我们想要得到的内容
 * @author only老K
 * xml解析技术: dom4j、sax解析、jdom解析
 * 重点是dom4j,后两种已经慢慢被淘汰
 * 
 */
public class Test4 {
public static void main(String[] args) throws Exception {
	InputStream in = Test4.class.getResourceAsStream("students.xml");
    SAXReader reader = new SAXReader();//dom4j的
    //将配置文件xml内容加载到了内存中
    Document doc=reader.read(in);//dom4j的,抛出异常
    //System.out.println(doc.asXML());
    List<Element> stuEles=doc.selectNodes("/students/student");//得到所以的student元素
    for (Element e : stuEles) {
		//System.out.println(e.asXML());
    	if("s002".equals(e.attributeValue("sid"))) {//得到每个sid的内容
    		Element nameE=(Element) e.selectSingleNode("name");//得到满足sid="s002"的元素name
    		//System.out.println(nameE.asXML());
    		//获取标签内的文本内容
    		System.out.println(nameE.getText());
    	}
	}
}
}

运行结果如下图:
在这里插入图片描述
第二种方法:
直接运行如下代码:

package wangcong.xml;

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

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

/**
 * 讲解如何解析xml从中获取我们想要得到的内容
 * @author only老K
 * xml解析技术: dom4j、sax解析、jdom解析
 * 重点是dom4j,后两种已经慢慢被淘汰
 * 
 */
public class Test4 {
	public static void main(String[] args) throws Exception {
		InputStream in = Test4.class.getResourceAsStream("students.xml");
	    SAXReader reader = new SAXReader();//dom4j的
	    //将配置文件xml内容加载到了内存中
	    Document doc=reader.read(in);//dom4j的,抛出异常
	    Element stuEle002 = (Element) doc.selectSingleNode("/students/student[@sid='s002']");
		Element nameEle = (Element) stuEle002.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 wangcong.xml;

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

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

/**
 * 完成目标:
   1、获取所有action中的type的值
   2、获取第二个action中的type的值
   3、获取第二个action的所有forward的path
   4、获取第二个action的第二个forward的path
 * @author only老K
 *
 */
public class work {
public static void main(String[] args) throws Exception {
	//读取同级目录下的配置文件
	InputStream in = Test1.class.getResourceAsStream("config.xml");//得到对应的流
	 SAXReader reader = new SAXReader();//dom4j的
	 Document doc=reader.read(in);//dom4j的,抛出异常
	 //1、获取所有action中的type的值
	 List<Element> stuEles = doc.selectNodes("/config/action");
	 for (Element e : stuEles) {
		System.out.println(" 1、获取所有action中的type的值"+e.attributeValue("type"));
		//2.获取第二个action中的type的值
		if("/loginAction".equals(e.attributeValue("path"))) {
			System.out.println("2.获取第二个action中的type的值"+e.attributeValue("type"));
		}
	}
	// 3、获取第二个action的所有forward的path
	 List<Element> foeEle =doc.selectNodes("/config/action[@type='test.LoginAction']/forward");
	 for (Element e : foeEle) {
		 // 3、获取第二个action的所有forward的path
		System.out.println("3、获取第二个action的所有forward的path"+e.attributeValue("path"));
		 //  4、获取第二个action的第二个forward的path
		if("success".equals(e.attributeValue("name"))) {
			System.out.println("4、获取第二个action的第二个forward的path"+e.attributeValue("path"));
		}
	}
}
}

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值