XML解析

hello,家人们,我们接着说XML,哈哈,顺便稍微复习一下JavaIO流

目录

一.🍖🍖Java复习IO流

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

三.🍭🍭dom4j的使用

四.🍓🍓xpath的使用

五.🥤🥤XML解析(举例)


一.🍖🍖Java复习IO流

  1. 我们先准备一张照片,它是D盘下的:

2.然后把一张D盘中的照片复制到D盘中的JSP文件夹中:


上代码:

package com.zking.y1_06;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo {

	
	public static void main(String[] args) throws IOException{
		
		//创建一个文件,里面填图片的路径
		File f=new File("D:\\a.jpg");
        
		//有了这个文件后,创建一个输入流
		FileInputStream in=new FileInputStream(f); //报错就抛出一个异常
		
		//想要用原名复制过来的话,就String一个name
		String name=f.getName();//获得原文件的名字
		
		//再创建一个文件,将f复制到target(输出流)
		File target=new File("D:\\JSP\\"+name);
		FileOutputStream out=new FileOutputStream(target);
		
		int i=0;
		//给它一个小推车,加快速度
		byte[] tmp=new byte[1024*99];
		
		//循环,直到传完
		while(in.read(tmp)!=-1) {
			out.write(tmp);
			i++;
		}
		
		//IO流需要手动关闭流
		in.close();
		out.flush();//有时间差,所以需要刷新一会,这样的话就把缓冲完的数据刷新成功再关闭
		out.close();
		System.out.println("hahaha" + i);
		
		
		
	}
	
}

运行结果为:

而这时,a.jpg这个照片已经复制到我们的JSP文件夹中


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

  • 同包(拿到同包下的文件

类名.class.getResourceAsStream("db.properties");

  • 根路径(拿到根目录下的文件

类名.class.getResourceAsStream("/db.properties");

  • WIN-INF安全路径(拿到WIN-INF安全路径

context.getResourceAsStream("/WEB-INF/db.properties");

	//主文件(通过自己的类点class,然后括号里要加/,不然就是说要和原文件放入同一个目录中)
		InputStream in = XmlReader.class.getResourceAsStream("/config.xml");

三.🍭🍭dom4j的使用

//dom4j的使用  
		//1.selectNodes 查看某一个节点(多个相同的元素) (每个节点就是每个元素)
		//2.selectSingleNode 查看单个节点(不需要遍历了)
		//3.attributeValue 属性
	    //4.getText 获取文本值

四.🍓🍓xpath的使用

//xpath的使用
		//xpath有点像sql语句
		// 1.'/'是定义路径的
		// 2.'@'是定义属性的

五.🥤🥤XML解析(举例)

在创建之前需要导jar包

然后创建一个Source Folder,取名为resources

然后在里面新建一个xml文件,叫config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<action path="/studentAction"
		type="org.lisen.mvc.action.StudentAction">
		<forward name="students" path="/students/studentList.jsp"
			redirect="false" />
	</action>
	<action path="/studentAction02"
		type="org.lisen.mvc.action.StudentAction">
		<forward name="students02" path="/students/studentList.jsp"
			redirect="false" />
	</action>
</config>

然后再正常的新建一个class类

package com.zking.y1_06;

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;

public class XmlReader {
	
	
	public static void main(String[] args) throws Exception {
		//主文件(通过自己的类点class,然后括号里要加/,不然就是说要和原文件放入同一个目录中)
		InputStream in = XmlReader.class.getResourceAsStream("/config.xml");
	    
		//xml中有一个帮助类,老各斯缺,哈哈,不懂的就去百度查 dom4j
		SAXReader reader=new SAXReader();
		Document doc = reader.read(in);//报错需要抛出异常
		
		Element rootElement = doc.getRootElement();//首先获取根元素;
		
		//dom4j常用方法:selectNodes
		List<Element> actions = rootElement.selectNodes("action");//获得config.xml中的action元素
		
		//遍历所有ations,在action元素中寻找path属性和type属性
		for (Element e : actions) {
			String path=e.attributeValue("path");
			String type=e.attributeValue("type");
			
			System.out.println("action path:"+path);
			System.out.println("action type:"+type);
			
			//forward这个元素不止一个,所以需要一个集合装起来(如果是"/forward"就是表示从根目录开始)
			List<Element> forwards = e.selectNodes("forward");
			
			//然后在集合中寻找name属性和path属性,还有一个redirect属性
			for (Element f : forwards) {
				String name=f.attributeValue("name");
				String fpath = f.attributeValue("path");
			    String redirect = f.attributeValue("redirect");//今天只是读取,所以不需要使用布尔
			     
			    System.out.println("forward name:"+name);
			    System.out.println("forward path:"+fpath);
			    System.out.println("forward redirect:"+redirect);
			}
			
		}
		
		//dom4j的使用  
		//1.selectNodes 查看某一个节点(多个相同的元素) (每个节点就是每个元素)
		//2.selectSingleNode 查看单个节点(不需要遍历了)
		//3.attributeValue 属性
	    //4.getText 获取文本值
		
		
		//xpath的使用
		//xpath有点像sql语句
		// 1.'/'是定义路径的
		// 2.'@'是定义属性的
		
		
		
	}

}

结果:(可以看到已经获取到了上面所提供的XML文件中的相关元素和节点了)

今天的代码就到这里啦,下期见

今天也要记得微笑呀.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值