xml解析简单分析

1.XML作用

1.1配置
.xml和.propertie

1.2数据交互(获取第三方数据)
XML:webservices(axis2)restful webservices 基于http协议的方式
JSON

2.Java中3种配置位置及读取方式

2.1如何使用Properties读取配置文件

  1)*.properties文件以键值对的方式存储数据;
id=001
name=\u5F20\u4E09
  2)使用Properties类读取配置文件;
package com.zhouzhuolin.xmlanalysis.test;

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

public class Demo{
	
	public static void main(String[] args) throws Exception {
		InputStream is = Demo.class.getResourceAsStream("/config.properties");
		//创建Properties
		Properties pro=new Properties();
		pro.load(is);
		System.out.println(pro.getProperty("id"));
		System.out.println(pro.getProperty("name"));
	}
	
}

测试结果

在这里插入图片描述

2.2 配置位置
1)存放于根目录下,/代表获取src根目录的绝对路径
2)存放于同一类的包下,不加/代表同类名包下的相对路径;
3)存放于WebContent或WebRoot目录下的WEB-INF目录下
ServletContext sc=this.getServletContext();
InputStream is=sc.getResourceAsStream("/WEB-INF/db.properties");

package test;

import java.io.IOException;
import java.io.InputStream;

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 Q extends HttpServlet{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@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 {
		ServletContext sc = this.getServletContext();
		InputStream is = sc.getResourceAsStream("/WEB-INF/cfg.properties");
		System.out.println(is);
	}
}

3.dom4j+xpath解析xml文件

1)xpath类似数据库中的select语句;
2)Document有节点(Node)组成:元素节点、属性、文本等;
3)selectNodes()获取节点下所有子节点;
4)selectSingleNodes()获取单个节点信息;
5) xpath语法:/(定位路径)、@(获取属性)

作业:config.xml解析

	   1、获取所有action中的type的值
	   2、获取第二个action中的type的值
	   3、获取第二个action的所有forward的path
	   4、获取第二个action的第二个forward的path
package com.zhouzhuolin.xmlanalysis.test;

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

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;

public class Demo3 {
	public static void main(String[] args) throws Exception {
		
//		作业:config.xml解析
//		   1、获取所有action中的type的值
//		   2、获取第二个action中的type的值
//		   3、获取第二个action的所有forward的path
//		   4、获取第二个action的第二个forward的path
		
//		以流的方式获取资源,返回InputStream输入流
		InputStream is = Demo3.class.getResourceAsStream("/config.xml");
//		创建SAXReader读取方式
		SAXReader sr=new SAXReader();
//		加载输入流转换成Document
		Document dc = sr.read(is);
//		节点由元素组成,元素不一定是节点
//		1./:定位
		List<Node> list = dc.selectNodes("/config/action");
		System.out.println("获取所有action中的type的值");
		for (Node node : list) {
			Element el=(Element) node;
//			1.以属性名获取属性值
			String att = el.attributeValue("type");
			System.out.println(att); 
			/**
			 * 可以看可不看
			 */
//			2.获取所有的属性
//			List<Attribute> a = el.attributes();
//			for (Attribute aa : a) {
//				System.out.println(aa.getName()+"="+aa.getValue());
//			}
		}
		
		System.out.println("获取第二个action中的type的值");
		List<Node> list2 = dc.selectNodes("/config/action[@path='/loginAction']");
		for (Node node : list2) {
			Element el=(Element) node;
			String att = el.attributeValue("type");
			System.out.println(att); 
		}
		
		System.out.println("获取第二个action的所有forward的path");
		List<Node> list3 = dc.selectNodes("/config/action[@path='/loginAction']/forward");
		for (Node node : list3) {
			Element el=(Element) node;
			String att = el.attributeValue("path");
			System.out.println(att); 
		}
		
		System.out.println("获取第二个action的第二个forward的path");
		List<Node> list4 = dc.selectNodes("/config/action[@path='/loginAction']/forward[@name='b']");
		for (Node node : list4) {
			Element el=(Element) node;
			String att = el.attributeValue("path");
			System.out.println(att); 
		}
		
	}
}

测试结果

在这里插入图片描述

作业加强 (第二种方式)

package com.zhouzhuolin.xmlanalysis.test;

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

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

public class Demo4 {
	
	public static void main(String[] args) throws Exception {
		
//		以流的方式获取资源,返回InputStream输入流
		InputStream is = Demo3.class.getResourceAsStream("/config.xml");
//		创建SAXReader读取方式
		SAXReader sr=new SAXReader();
//		加载输入流转换成Document
		Document dc = sr.read(is);
//		节点由元素组成,元素不一定是节点
		
//		作业:config.xml解析
//		   1、获取所有action中的type的值
//		   2、获取第二个action中的type的值
//		   3、获取第二个action的所有forward的path
//		   4、获取第二个action的第二个forward的path
		System.out.println("---获取所有action中的type的值---");
		List<Node> list = dc.selectNodes("/config/action");
		for (Node node : list) {
			Element el=(Element) node;
			//1.以属性名获取属性值
			String att = el.attributeValue("type");
			System.out.println(att); 
		}
		
		System.out.println("---获取第二个action中的type的值---");
		//Element 节点转换成元素
		//selectSingleNode 只存储一个节点
		Element el3 = (Element) dc.selectSingleNode("/config/action[@path='/loginAction']");
		//以属性名获取属性值
		String type3 = el3.attributeValue("type");
		System.out.println(type3);
		
		System.out.println("---获取第二个action的所有forward的path---");
		List<Node> list3 = dc.selectNodes("/config/action[@path='/loginAction']/forward");
		for (Node node : list3) {
			Element el=(Element) node;
			String att = el.attributeValue("path");
			System.out.println(att); 
		}
		
		System.out.println("---获取第二个action的第二个forward的path---");
		Element el6 = (Element) dc.selectSingleNode("/config/action[@path='/loginAction']/forward[@name='b']");
		String type6 = el6.attributeValue("path");
		System.out.println(type6);
		
	}
	

}

测试结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值