Java对XML的解析

3 篇文章 0 订阅

 

目录

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

1.1 读取*.properties配置文件

.properties文件:

通过java读取.properties文件

1.2 读取.xml文件

.xml文件:

通过java底层的方式读取

在Servlet中读取.xml文件:

2 XML和*.properties(属性文件)

  2.1 存放位置

    2.1.1 src根目录下

    2.2.2 与读取配置文件的类在同一包

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


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

1.1 读取*.properties配置文件

.properties文件:

#账户
username=scott
#密码
password=tiger

通过java读取.properties文件

package com.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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

public class Test extends HttpServlet{
	@Override
	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 {
		// TODO Auto-generated method stub
//-------------------------------------------------------------------
		//获得application(ServletContext)
		ServletContext application = req.getSession().getServletContext();
		//访问WEB-INF下面的do.properties文件
		String xPath = "/WEB-INF/do.properties";
		//通过上下文(application)获得输入流(InputStream)
		InputStream is=  application.getResourceAsStream(xPath);
		//实例化properties对象
		Properties properties = new Properties();
		//properties对象加载输入流
		properties.load(is);
		//通过properties获得getProperty()方法得到参数
		System.out.println(properties.getProperty("username"));
		System.out.println(properties.getProperty("password"));
//-------------------------------------------------------------------
		//访问src下面的配置文件
//		InputStream is = Test.class.getResourceAsStream("/do.properties");
//		Properties properties = new Properties();
//		properties.load(is);
//		String username = properties.getProperty("username");
//		String password = properties.getProperty("password");
//		System.out.println(username);
//		System.out.println(password);
//-------------------------------------------------------------------
		//访问同包下面的配置文件
//		InputStream is = Test.class.getResourceAsStream("do.properties");
//		Properties properties = new Properties();
//		properties.load(is);
//		String username = properties.getProperty("username");
//		String password = properties.getProperty("password");
//		System.out.println(username);
//		System.out.println(password);
	}
}

1.2 读取.xml文件

.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Students>
<Student a="1" sid="s1">
<name>张三</name>
</Student>
<Student a="2" sid="s2">
<name>李四</name>
</Student>
<Student a="3" sid="y2">
<name>王五</name>
</Student>
<a a="3a" sid="y2a">
<name>王五a</name>
</a>
<b a="3b" sid="y2b">
<name>王五b</name>
</b>
</Students>

通过java底层的方式读取

package com.test;

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

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

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

import com.sun.org.apache.bcel.internal.classfile.AttributeReader;
/**
 * 解析XML文件的测试类
 * @author Administrator
 *
 */
public class TestSelectXPath{
	public static void main(String[] args) throws Exception {
		
		InputStream is = TestSelectXPath.class.getResourceAsStream("Test.xml"); //获得Test.xml文件
		SAXReader saxreader = new SAXReader(); //实例化SAXReader对象
		Document document = saxreader.read(is);  //读取Test.xml文件
		//String xpath = "/Students/Student";   //元素节点Students中的Student元素节点
		//String xpath = "//Student"; //元素节点为Student的不管在什么节点下面   ,如果是/Student查找不到元素节点
//		List<Node> li = document.selectNodes(xpath); //文件中查询元素节点以下的所有内容,返回的是List(多个Node节点)
//		for (Node node : li) {		//遍历得到的是多个节点
//			Element StudentElement = (Element)node;  //将节点转为元素节点
			Element nameElement = (Element)StudentElement.selectSingleNode("name");  //在元素节点中查询,其中元素节点中包含name的元素节点,得到的是节点类型,强转Elemen元素节点类型
			System.out.println(nameElement.getText());//得到所有元素节点中的文本类型(内容)
//			String aAttribute = StudentElement.attribute("a").getText();
//			//StudentElement(得到元素节点Student),attribute得到元素节点中的属性“a”,获得文本类型
//			System.out.println(aAttribute);  //输出文本类型
		//}
		
//------------------------------------------------------------------		
//		String xpath = "//@a";//属性为a的节点
//		List<Node> aNode = document.selectNodes(xpath);   //文档中查询节点
//		for (Node anode : aNode) {		//得到多个属性节点
//			System.out.println(anode.getText());  //输出属性节点的文本类型
//		}
//--------------------------------------------------------------------		
//		String xpath ="/Students/Student[2]";  //选取属于Students 子元素的第2个 Student 元素。
//		List<Node> studentNodes = document.selectNodes(xpath);  //从文档中查询节点
//		for (Node studentSode : studentNodes) {		//得到多个节点
//			Element ElementStudent = (Element)studentSode;	//将节点转为元素节点
//			System.out.println(ElementStudent.selectSingleNode("name").getText());
//			//输出,在元素节点中查找元素节点为name的文本节点的内容()
//			System.out.println(ElementStudent.attribute("sid").getText());
//			//输出,在元素节点中查找属性为sid的文本节点的内容
//		}
//------------------------------------------------------------------------------
//		String xpath ="/Students/Student[last()]";  //选取属于Students 子元素的最后一个 Student 元素。
//		Node StudentLactNode = document.selectSingleNode(xpath);
//			System.out.println(StudentLactNode.selectSingleNode("name").getText());
//			//输出,在元素节点中查找元素节点为name的文本节点的内容()
//			//System.out.println(StudentLactNode.hasContent());  //判断元素节点是否有内容
//			//System.out.println(StudentLactNode.ATTRIBUTE_NODE);
//---------------------------------------------------------------------------
//		String xpath = "Students/Student[@sid='y2']";
//		Element StudentSidNode = (Element)document.selectSingleNode(xpath);
//		//需要转元素节点,不然的话有一些方法调不出
//		System.out.println(StudentSidNode.selectSingleNode("name").getText());
//		//通过元素节点查询节点为name的文本节点内容
//		System.out.println(StudentSidNode.attribute("sid").getText());
//	-------------------------------------------------------------------------
//		String xpath = "/Students/Student[@*]";//匹配任何属性节点,不打也是这样
//		List<Node> allNodes = document.selectNodes(xpath);
//		for (Node node : allNodes) {
//			Element nodeELement = (Element)node;
//			System.out.println(nodeELement.selectSingleNode("name").getText());
//		}
//		-------------------------------------------------------------------------
//		String xpath = "//a|//b";//匹配a或者b节点
		//获得元素
//		List<Node> allNodes = document.selectNodes(xpath);
//		for (Node node : allNodes) {
//			Element abEmelemt = (Element)node;
//			System.out.println(abEmelemt.attribute("sid").getText());
//			System.out.println(abEmelemt.selectSingleNode("name").getText());
//			//System.out.println(abEmelemt.selectSingleNode("sid").getText());
//		}
//		-------------------------------------------------------------------------

		
		
		
		
	}
}

在Servlet中读取.xml文件:

package com.test;

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

import javax.servlet.ServletContext;
/**
 * 测试
 */
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

public class TestSelectXPathServlet extends HttpServlet{
	@Override
	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 {
		// TODO Auto-generated method stub
		//获取Test.xml在WEB-INF下面的路径
		String xpath = "/WEB-INF/Test.xml";  
		//获得application(ServletContext)
		ServletContext application = req.getSession().getServletContext();
		//通过上下文(application)获得输入流(InputStream)
		InputStream is = application.getResourceAsStream(xpath);
		//实例化阅读器--驱动包里面的
		SAXReader saxReader = new SAXReader();
		try {
			//使用阅读器读取is里面的文件
			Document document =  saxReader.read(is);
			List<Element> StudentEmelemt = document.selectNodes("//Student");
			for (Element studentEmelemt : StudentEmelemt) {
				System.out.println(studentEmelemt.attributeValue("sid"));
			}
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

 

2 XML和*.properties(属性文件)

  2.1 存放位置

    2.1.1 src根目录下

          Xxx.class.getResourceAsStream("/config.properties");

    2.2.2 与读取配置文件的类在同一包

          Xxx.class.getResourceAsStream("config2.properties");

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

          ServletContext application = this.getServletContext();

  InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");

 

  注1:*.properties文件

       key=value

       #注释

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值