XML解析

目录

一,什么是XML解析

1.1 概述:

1.2 解析方式(四种)

1.2.1 DOM解析:

1.2.2 SAX解析:

1.2.3:StAX解析:

1.2.4:JAXB解析:

二,配置文件的解析(同包,根路径,WEB-INF安全路径)

2.1 同包路径解析配置文件

2.1 普通配置文件同包解析过程:

2.2 根目录中解析文件

    2.2.1理念:

2.3 WEB-INF安全目录解析文件

三,XML配置文件的解析

3.1方法:


一,什么是XML解析

1.1 概述:

      将XML文档转换为计算机程序可读取的格式的过程。XML文档中的元素、属性、实体等都需要被解析成程序能够理解的形式,以便程序能够对其进行处理和操作。

1.2 解析方式(四种)

1.2.1 DOM解析:

       DOM(文档对象模型)解析器将整个XML文档读入内存,并创建一个文档树,程序可以遍历该文档树并操作其中的节点。DOM解析器适用于文档相对较小的情况。

1.2.2 SAX解析:

     一个事件驱动的解析器。按顺序读取XML文档,并触发事件,例如元素开始和结束、注释、处理指令等等。SAX解析器适用于大型XML文档,因为它不要求将整个文档加载到内存中。

1.2.3:StAX解析:

      是SAX和DOM两种解析器的结合体。StAX解析器使用迭代器的方式依次处理XML文档中的元素、属性、实体等,并且可以在处理中插入自定义的代码,以便在解析过程中进行特定的业务逻辑操作。

1.2.4:JAXB解析:

   将XML与Java对象之间进行双向转换。它通过将XML文档中的元素、属性等映射到Java类的属性和方法上,从而将XML文档转换为Java对象,并且可以将Java对象转换为XML文档。JAXB解析器适用于需要将XML文档和Java对象之间进行频繁转换的应用程序。

二,配置文件的解析(同包,根路径,WEB-INF安全路径)

2.1 同包路径解析配置文件

   概念什么叫同包下路径的配置文件呢?(看下图),配置文件和解析配置文件的类在同一个包中,就叫同包,config这个包就是另外的包

2.1 普通配置文件同包解析过程:

一:获取需要解析配置文件 

二:定义解析的类 properties

三:将解析加载配置文件(相当于解析了配置文件)

四:输出解析打印想要获取的文件内容

所需要配置文件db.properties:

 解析文件代码:

package com.LiuBing_text;

/**
 * 读取不同下的配置文件
 */
import java.io.InputStream;
import java.util.Properties;

public class Demo1 {
	public static void main(String[] args) throws Exception {
//		 同目录下的配置文件 获取配置文件
		 InputStream in = Demo1.class.getResourceAsStream("db.properties");

		 // Properties 加载附有db.properties文件的内容
		 Properties p = new Properties();
	 	 p.load(in);
		 // 打印输出
		 System.out.println(p.getProperty("uname"));
		 System.out.println(p.getProperty("upass"));

	}
}

运行结果:

 

2.2 根目录中解析文件

    2.2.1理念:

                 步骤大致都是一样的,只需要在获取配置文件的在前打一个' / ' 代表着源根文                         件目录 

    注意:要看配置文件是否Floder文件包中,因为它属于普通文件夹Java源文件无法编译成                 Java字节码,文件只会当作普通文件夹和资源文件夹一定在SourceFolder源文                    件夹)下                

2.3 WEB-INF安全目录解析文件

   前提:如果需要获取定义在安全目录下的文件,需要定义Servlet去获取配置文件

  

  注意:注意配置文件的位置,一定是要在WEB-INF安全目录下(如下图),  第一个                                 db.properties是在WEB-INF安全文件下。最下面一个db.properties是没在安全目                录下是无法解析配置文件的

 

       如果确定没有问题就开始定义一个Servlet类,普通的类是无法解析的,内容不可通过URL直接访问,它们只能被Web应用程序访问。

Servlet解析代码:

package com.LiuBing_text;
/**
 * 安全目录下获取文件
 */
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Db_properties_Servlet
 */
@WebServlet("/ccc")
public class Db_properties_Servlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           //安全目录下的文件      先获取上下文信息  再读取数据资源路径  返回资源内容 
		   InputStream in = request.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
		   // Properties 加载附有db.properties文件的内容
		   Properties p= new Properties();
	       p.load(in);
	       System.out.println(p.getProperty("uname"));
	       System.out.println(p.getProperty("upass"));

		
		
	}

}

    在Servlet中要先获取上下文信息,再读取配置文件,大致操作步骤内容都和同包和根源文件操作是一致的

三,XML配置文件的解析

3.1方法:

  1.     selectNodes();   获取某一个节点
  2.      selectSingNode();   获取单个节点
  3.     getText();   获取某一个标签的内容
  4.      attributeValue();  获取属性的值

代码展示:

package com.LiuBing_text;

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

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

public class Demo2 {
	// selectNodes 获取某一个节点
	// selectSingNode 获取单个节点
	// getText 获取某一个标签的内容
	// attributeValue//获取属性的值

	public static void main(String[] args) throws Exception {
		// 获取需要解析的xml配置文件
		InputStream in = Demo1.class.getResourceAsStream("students.xml");

		// 定义一个xml解析器  以便读取所有的节点
		SAXReader sr = new SAXReader();
		// 读取xml文件   Document对象代表了整个XML文档,它是所有元素的根元素。
		Document doc = sr.read(in);
		// asXML();XML元素转换为XML文本形式
		// 获取所有的xml文件的内容
		 System.out.println(doc.asXML());

		 //获取student节点
		List<Element> student = doc.selectNodes("/students/student");
		//遍历拿到父标签下所有的父标签和子标签及属性
		for (Element studenElement : student) {
			// 获取student下的所有标签内容
			// System.out.println(studenElement.asXML());

			// 只获取name标签及以下内容 
			// Element nameElement = (Element) studenElement.selectSingleNode("name");
			// System.out.println(nameElement.asXML());

			// 获取name中的内容
			// System.out.println(nameElement.getText());

			// 获取student标签中的id
			// System.out.println(studenElement.attributeValue("sid"));

		}

		// Xpath
		Element studenElement1 = (Element) doc.selectSingleNode("/students/student[@sid='s003']/name");
		System.out.println(studenElement1.getText());

	}
}

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.Doll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值