XML的解析

依旧是它~~~

内容从这里就开始了……

一 、Java中三种配置位置及读取方式

1、Properties读取配置文件

①、*.properties文件以键值对的方式存储数据;

②、使用Properties类读取配置文件;

2、配置位置

①、存放于同一类的包下,不加 / 代表同类名包下的相对路径;

②、存放于根目录下, 代表获取src根目录的绝对路径

package com.mwy.xml;

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

/**
 * 配置文件存在位置
 * 其中properties文件就是资源文件中的一种
 *1、同包
 *2、根目录下
 *3、WEB-INF
 */
public class Test_1 {
	public static void main(String[] args) throws IOException{
		//InputStream in = Test_1.class.getResourceAsStream("db.properties");//同包
		InputStream in = Test_1.class.getResourceAsStream("/db.properties");
		Properties p=new Properties();
		p.load(in);
		System.out.println(p.getProperty("uname"));
		System.out.println(p.getProperty("upass"));
		
	}

}

别忘了加  /  ,不然会报错的;

③、存放于WEB-INF目录下

二、dom4j的使用

1、Document有节点(Node)组成:元素=节点、属性、文本等;

2、Node(节点)  Element(元素) 区别  getText();

3、selectNodes()获取节点下所有子节点;

4、selectSingleNode()获取单个节点信息;

5、attributeValue():获得指定对象的属性值;

例题:获得小王这个人名

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.mwy.xml;
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 Test_3 {
	public static void main(String[] args) throws DocumentException {
		//获得小王这个人名
		/**
		 * 1、读取到students.xml的xml串内容
		 * 2、解析到所有的student标签的内容
		 * 3、获得到所有student标签的sid
		 * 4、当sid=s003的时候,获取Name标签内容
		 */
		InputStream in = Test_3.class.getResourceAsStream("students.xml");
		SAXReader sr=new SAXReader();
		Document doc = sr.read(in);
		//System.out.println(doc.asXML());//读出界面所有的内容
		//selectNodes:获得对应节点对象,返回List
		List<Element> list = doc.selectNodes("/students/student");
		for (Element element : list) {
			//System.out.println(element.asXML());//读出所有的student
			//attributeValue:获得指定对象的属性值
			String sid = element.attributeValue("sid");//
			//System.out.println(sid);//读出所有的sid
			if("s003".equals(sid)) {
				//selectSingleNode获得对应节点对象,返回单个元素对象
				Element name =(Element) element.selectSingleNode("name");
				System.out.println(name.getText());
				
			}}	
	}
}

三、xpath的使用

xpath类似数据库中的select语句;

1、xpath语法:

      ①、/(定位路径);

      ②、@(获取属性);

package com.mwy.xml;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
//获得小王这个人名
public class Test_4 {
	public static void main(String[] args) throws DocumentException {
		InputStream in = Test_4.class.getResourceAsStream("students.xml");
		SAXReader sr=new SAXReader();
		Document doc = sr.read(in);
		Element name =(Element) doc.selectSingleNode("/students/student[@sid='s002']/name");
		System.out.println(name.getText());	
	}
}

四、问题:

1、获得所有action中的type的值;

2、获得第二个action中的type的值;

3、获得第二个action的所有forward的path;

4、获得第二个action的第二个forward的path;

package com.mwy.xml;

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;
public class Test_5 {
	public static void main(String[] args) throws DocumentException {
		//1、获得所有action中的type的值
		InputStream in = Test_5.class.getResourceAsStream("config.xml");
		SAXReader sr=new SAXReader();
		Document doc = sr.read(in);
		//selectNodes:获得对应节点对象,返回List
		List<Element> list = doc.selectNodes("/config/action");
		for (Element element : list) {
			//System.out.println(element.asXML());//读出所有的action
			String type = element.attributeValue("type");
			System.out.println(type);
		}
		System.out.println("------");
		//2、获得第二个action中的type的值
		//①
		Element type =(Element) doc.selectSingleNode("/config/action[@path='/loginAction']");
		String type1 = type.attributeValue("type");
		System.out.println(type1);
		System.out.println("^^^^^^^^^");
		//②
		Element typ=(Element)list.get(1);
		String typ1 = typ.attributeValue("type");
		System.out.println(typ1);
		
		System.out.println("------");
		//3、获得第二个action的所有forward的path
		List<Element> list1 = doc.selectNodes("/config/action[@path='/loginAction']/forward");
		for (Element element : list1) {
			//System.out.println(element.asXML());//读出所有的forward
			String path = element.attributeValue("path");
			System.out.println(path);	
		}
		System.out.println("------");
		//4、获得第二个action的第二个forward的path
	        //①
			Element name =(Element) doc.selectSingleNode("/config/action[@path='/loginAction']/forward[@name='success']");
			String path1 = name.attributeValue("path");
			System.out.println(path1);
			System.out.println("^^^^^^^^^");
			//②
			Element path=(Element)list1.get(1);
			String pat = path.attributeValue("path");
			System.out.println(pat);
		}
}

得到结果:

结束啦~~~

下次再见~~~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值