XML解析

博客主要介绍Java中XML解析相关内容。包含Java配置文件的三种配置位置及读取方式,如src根目录、与类同一包、WEB - INF目录下。还阐述了XML的作用,重点讲解dom4j+xpath解析xml文件,xpath类似数据库select语句,最后给出了相关案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML解析

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

首先你要写一个xxx.properties文件(例如:db.properties)
如下图:
在这里插入图片描述
而文件的内容你可以写如下:

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

initPoolSize=5
maxPoolSize=20

之后想获取其中的内容,首先编写代码了:
第一种方法:(src根目录下)同级的时候

package com.bowen.prase;

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


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

第二种方法:( 与读取配置文件的类在同一包)
首先你需要创建一个配置包(conf)把(db.properties)文件放进去;
如下图:
在这里插入图片描述
之后:

package com.bowen.prase;

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


/**
 * 读取项目路径下的配置文件
 * (xml properties)
 * @author 125x
 *
 */
public class Demo2 {
	public static void main(String[] args) throws Exception {
		//读取同包下的配置文件
		InputStream in=	Demo2.class.getResourceAsStream("/db.properties");
		Properties ps=new Properties();
		//将读取的配置文件对应的流对象交给properties进行管理
		ps.load(in);
		System.out.println(ps.getProperty("uname"));
		System.out.println(ps.getProperty("upass"));
	}
}

其实改的不多,就是在(db.properties)文件加了一个 ( / );

第三种方法: WEB-INF(或其子目录下)
首先你要编写一个servlet文件:

package com.bowen.prase;

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{
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	// TODO Auto-generated method stub
	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();
	p.load(in);
	System.out.println(p.getProperty("uname"));
	System.out.println(p.getProperty("upass"));
	//req.getRequestDispatcher("/WEB-INF/b.jsp").forward(req, resp);
	}
}

如上代码最后得到(db.properties文件)的中这两个值就OK了:
在这里插入图片描述

2.XML的作用

dom4j+xpath解析xml文件 xpath等同数据库的select语句

首先我们要导一个xml文件
在这里插入图片描述
内容如下(students.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>

接下来就是获取里面的内容了:
下面展示一些 内联代码片

package com.bowen.prase;

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,获取其中想要得到的内容
 * 
 * xml解析技术:
 * domj4   sax解析   jdom解析 
 * @author 125x
 *
 */
public class Demo4 {
public static void main(String[] args) throws Exception {
	InputStream in= Demo4.class.getResourceAsStream("students.xml");
	SAXReader reader=new SAXReader();
	//将配置文件加进去
	Document doc=reader.read(in);
	System.out.println(doc.asXML());
       
}

}

运行之后:
在这里插入图片描述
会把里面所有内容都打印出来,但是我们有时候就是查一个而已,所依我们就出现了(xpath 八爪鱼 按照查找目录的方式去查找xml内容)

package com.bowen.prase;

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,获取其中想要得到的内容
 * 
 * xml解析技术:
 * domj4   sax解析   jdom解析 
 * @author 125x
 *
 */
public class Demo4 {
public static void main(String[] args) throws Exception {
	InputStream in= Demo4.class.getResourceAsStream("students.xml");
	SAXReader reader=new SAXReader();
	//将配置文件加进去
	Document doc=reader.read(in);
	//System.out.println(doc.asXML());
	
	//xpath 八爪鱼  按照查找目录的方式去查找xml内容
	//第一种
	      List<Element> stu= doc.selectNodes("/students/student");
	      for (Element stuEle : stu) {
			//System.out.println(stuEle.asXML());
	    	  //获取sid的属性值与说2002进行对比,如果是那么就取出name标签对应的值
	    	  if("s002".equals(stuEle.attributeValue("sid"))) {
	    		  Element namestu= (Element) stuEle.selectSingleNode("name");
	    		  //获取文本内容
	    		  System.out.println("第一种");
	    		  System.out.println(namestu.asXML()+"---"+namestu.getText());
	    		  System.out.println("----");
	    	  }
		}
		//第二种:
	Element s002= (Element) doc.selectSingleNode("/students/student[@sid='s002']");
	System.out.println("第二种");
	System.out.println(s002.asXML());
	Element s=(Element) s002.selectSingleNode("name");
	System.out.println(s.getText());
	System.out.println("-------");
	        
}

}

最后的输出结果如下图:
在这里插入图片描述
document.selectNodes(xpath);//查一组
document.selectSingleNode(xpath);//查单个

confin案例:

下面展示一些 内联代码片

package com.bowen.prase;

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

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

/**
 *  @author 125x
 * 作业:config.xml解析con
   1、获取所有action中的type的值
   2、获取第二个action中的type的值
   3、获取第二个action的所有forward的path
   4、获取第二个action的第二个forward的path

 *
 */
public class work {
	public static void main(String[] args) throws Exception {
			//读取同级目录下的配置文件
			InputStream in = work.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"));
				}
			}
		}
		
}

结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值