XML-解析

XML-解析

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

  • 1 XML和*.properties(属性文件)
  • 2 存放位置
    • 1 src根目录下
    • 2 与读取配置文件的类在同一包
    • 3 WEB-INF(或其子目录下)

下面展示一些 内联代码片

package com.lrc.jiexi;

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

/**
 * 各个位置下的资源文件(properties、xml结尾的文件)的读取方式
 * 1.同包下的资源文件读取(不常用)
 * 2.将所有的资源文件包含在根目录下
 *   编译后所有的资源文件都会进web-inf下
 * 3.直接将资源文件放到web-inf下
 */
public class PropertiesDemo {
	public static void main(String[] args) throws IOException {
		//将当前类同包下的db.properties资源文件转换成输入流
		InputStream in=PropertiesDemo.class.getResourceAsStream("db.properties");
		//如果这个包中没有这个文件,意味着流也不存在,会报空指针异常
		Properties p=new Properties();
		//读取的配置文件对应的流对象交给Properties管理
		p.load(in);//把转换的输入流传进去(资源文件已经以流的形式转换,就加载进去)
		//查看一下里面有不有
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upwd"));
		
		
	}
}

package com.lrc.jiexi;

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 PropertiesServlet extends HttpServlet {
	
	//端口号
	private static final long serialVersionUID=1160110259263103368L;
	@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 context= req.getServletContext();
		InputStream in=context.getResourceAsStream("/WEB-INF/db.properties");
		Properties p=new Properties();
		p.load(in);
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upass"));
		
	}
}

代码效果显示如下
XML-解析_第1张图片
XML-解析_第2张图片
XML-解析_第3张图片

2.XML的作用

  • 配置
    • properties(不需要重启服务器,通常用于定义常量)
    • xml
  • 数据交换
    • xml
    • webservice
    • json
  • 静态资源文件
    • css,js,html,图片,视屏

3.dom4j+xpath解析xml文件

xpath等同数据库的select语句
xpath按照查找目录的方式去查找xml内容
xml可以作为数据传输

  • DOM由节点组成
    • 元素节点
    • 属性节点
    • 文本节点

下面展示一些 内联代码片

package com.lrc.jiexi;

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;

/**
 * 如何解析xml,获取其中想要的内容
 * xml解析技术:
 * dom4j(主流),sax,jdom
 */
public class ProDemo {
	public static void main(String[] args) throws DocumentException {
		InputStream in=ProDemo.class.getResourceAsStream("students.xml");
		SAXReader reader=new SAXReader();
		//将配置文件xml内容加载进内存
		Document doc=reader.read(in);
//		System.out.println(doc.asXML());
		//xpath  按照查找目录的方式去查找xml内容
//		List stu=doc.selectNodes("students/student");
//		for (Element ele : stu) {
//			//System.out.println(ele.asXML());
//			//获取sid的属性值,s002对比,如果是,就取出name的值
//			if("s002".equals(ele.attributeValue("sid"))) {
//				Element nele=(Element) ele.selectSingleNode("name");
//				//System.out.println(nele.asXML());
//				//获取标签里的文本内容
//				System.out.println(nele.getText());
//			}
//		}
		
		Element sele=(Element)doc.selectSingleNode("/students/student[@sid='s002']");
		//System.out.println(sele.asXML());
		Element nele=(Element) sele.selectSingleNode("name");
		//获取标签里的文本内容
		System.out.println(nele.getText());
	}
}

代码效果显示如下
XML-解析_第4张图片
XML-解析_第5张图片
XML-解析_第6张图片
XML-解析_第7张图片
XML-解析_第8张图片
XML-解析_第9张图片
XML-解析_第10张图片

自主作业

1、获取所有action中的type的值
2、获取第二个action中的type的值
3、获取第二个action的所有forward的path
4、获取第二个action的第二个forward的path


下面展示一些 内联代码片

package com.lrc.jiexi;

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;

/**
 * 1、获取所有action中的type的值
 * 2、获取第二个action中的type的值
 * 3、获取第二个action的所有forward的path
 * 4、获取第二个action的第二个forward的path
 *
 */
public class Work {
	public static void main(String[] args) throws DocumentException {
		InputStream in=ProDemo.class.getResourceAsStream("config.xml");
		SAXReader reader=new SAXReader();
		//将配置文件xml内容加载进内存
		Document doc=reader.read(in);
		
		//1、获取所有action中的type的值
//		List cf=doc.selectNodes("/config/action");
//		for (Element ele : cf) {
//			//System.out.println(ele.asXML());
//				String ty=ele.attributeValue("type");
//				//System.out.println(nele.asXML());
//				//获取标签里的文本内容
//				System.out.println(ty);
//		}
		
		
		//2、获取第二个action中的type的值
//		List cf=doc.selectNodes("/config/action[@path='/loginAction']");
//		for (Node node : cf) {
//			Element el=(Element)node;
//			String ty=el.attributeValue("type");
//			System.out.println(ty);
//		}
		
		//3、获取第二个action的所有forward的path
//		List cf=doc.selectNodes("/config/action[@type='test.LoginAction']/forward");
//		for (Node node : cf) {
//			Element el=(Element)node;
//			String p=el.attributeValue("path");
//			System.out.println(p);
//		}
		
		//4、获取第二个action的第二个forward的path
		List<Node> cf=doc.selectNodes("/config/action[@type='test.LoginAction']/forward[@name='success']");
		for (Node node : cf) {
			Element el=(Element)node;
			String p=el.attributeValue("path");
			System.out.println(p);
		}
	
	}
}

代码效果显示如下
XML-解析_第11张图片
XML-解析_第12张图片
XML-解析_第13张图片
XML-解析_第14张图片

你可能感兴趣的:(J2EE)