J2EE06 XML解析

目录

 

XML解析

 思维导图:

例题1: 

例题2:

例题3:

例题4:


 

XML解析

1.XML作用
   1.1配置 (保存数据)
   *.xml和*.properties INI   yml  springboot
   1.2数据交互(获取第三方数据)
    webservice   xml  ajax    json
   
2.Java中3种配置位置及读取方式
   2.1如何使用Properties读取配置文件
      1)*.properties文件以键值对的方式存储数据;
      2)使用Properties类读取配置文件;
    
   2.2 配置位置
      1)存放于根目录下,/代表获取src根目录的绝对路径
      2)存放于同一类的包下,不加/代表同类名包下的相对路径;
      3)存放于WEB-INF目录下
      ServletContext sc=this.getServletContext();
      InputStream is=sc.getResourceAsStream("/WEB-INF/db.properties");
log4j 日志 log for java
3.dom4j+xpath解析xml文件  document   for  java   SAX   
    1)xpath类似数据库中的select语句;
    2)Document有节点(Node)组成:元素.节点、属性、文本等
    3)  Node(节点)  Element(元素) 区别  getText();
    3)selectNodes()获取节点下所有子节点;
    4)selectSingleNode()获取单个节点信息;
    5) xpath语法:/(定位路径)、@(获取属性)

 

 思维导图:

例题1: 

Demo01.java

package Ktdm;

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


public class Demo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//获取读取文件的io流  /代表绝对路径 src下面的文件
		InputStream is = Demo01.class.getResourceAsStream("/Ktdm/db.properties");
		
		System.out.println(is);
		
		InputStream is1 = Demo01.class.getResourceAsStream("db.properties");
		
		System.out.println(is1);
		
		//创建读取properties文件的工具类
		
		Properties pp=new Properties();
		
		//读取.properties配置文件
		try {
			pp.load(is);
			
			String name=pp.getProperty("user");
			String password = pp.getProperty("password");
			System.out.println(name+"是"+password);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		
		
		
	}

}

db.properties

user=\u963F\u5371
password=250

 

效果图:

 

例题2:

Demo02.java

package Ktdm;

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 Demo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//获取读取文件的io流  /代表绝对路径 src下面的文件
		InputStream is = Demo02.class.getResourceAsStream("/students.xml");
		
		
		System.out.println(is);
		
		
		//创建xml文件读取工具类对象 SaxReader
		SAXReader sr=new SAXReader();
		
		
		try {
			//读取.xml的配置文件,获得Docment对象
			Document doc = sr.read(is);
			List<Node> studentNodes = doc.selectNodes("/students/student");
			System.out.println(studentNodes.size());
			
//			List nameNodes = doc.selectNodes("/students/student/name");
//			System.out.println(nameNodes.size());
			//遍历所有的student节点
			for (Node node : studentNodes) {
				//获取student节点价的name节点
				Node nameNode = node.selectSingleNode("name");
				//获取name节点下面的文本
				String name = nameNode.getText();
				System.out.println(name);
				
				//节点对象没有属性 获取属性 1.将node转换成元素element
				Element el=(Element)node;
				
				//获取element对象的属性值
				String sid = el.attributeValue("sid");
				System.out.println(sid);
				
				
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		
		
		
	}

}

students.xml

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student sid="s001">
		<name>小明</name>
	</student>
	<student sid="s002">
		<name>小芳</name>
	</student>
	<student sid='y003s'>
		<name>小王</name>
	</student>
	<student sid='z004' qq="111">
		<name>叼毛危</name>
	</student>
</students>

 

 

效果图:

例题3:

Demo03.java

package Ktdm;

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 Demo03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//获取读取文件的io流  /代表绝对路径 src下面的文件
		InputStream is = Demo03.class.getResourceAsStream("/students.xml");
		
		
		System.out.println(is);
		
		
		//创建xml文件读取工具类对象 SaxReader
		SAXReader sr=new SAXReader();
		
		
		try {
			//读取.xml的配置文件,获得Docment对象
			Document doc = sr.read(is);
//			List nodes = doc.selectNodes("//*");
//			System.out.println(nodes.size());
			
//			Node node = doc.selectSingleNode("/students/student[@sid='s001']");
//			Node node = doc.selectSingleNode("/students/student[@qq]");
//			Node selectSingleNode = node.selectSingleNode("name");
//			System.out.println(selectSingleNode.getText());
			
			//查找以s开头的值
//			List<Node> nodes = doc.selectNodes("//*[starts-with(@sid,'s')]");
			//查找以s结尾的值
//			List<Node> nodes = doc.selectNodes("//*[ends-with(@sid,'s')]");
			//查找包含s的值
			List<Node> nodes = doc.selectNodes("//*[contains(@sid,'s')]");
			for (Node node : nodes) {
				Node selectSingleNode = node.selectSingleNode("name");
				System.out.println(selectSingleNode.getText());
			}
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		
		
		
	}

}

 students.xml

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student sid="s001">
		<name>小明</name>
	</student>
	<student sid="s002">
		<name>小芳</name>
	</student>
	<student sid='y003s'>
		<name>小王</name>
	</student>
	<student sid='z004' qq="111">
		<name>叼毛危</name>
	</student>
</students>

 

效果图:

例题4:

Demo05.java

package Zy;

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 Demo01 {
public static void main(String[] args) {
	
	InputStream is = Demo01.class.getResourceAsStream("/config.xml");
	InputStream is1 = Demo01.class.getResourceAsStream("/hibernate.cfg.xml");
	
	System.out.println(is);
	System.out.println(is1);
	
	SAXReader sr=new SAXReader();
	
	
	try {
		Document doc = sr.read(is);
		Document doc1 = sr.read(is1);
		List<Node> pathNodes = doc.selectNodes("/config/action");
		List<Node> nameNodes = doc.selectNodes("/config/action/forward");
		List<Node> redirectNodes = doc.selectNodes("/config/action/forward");
		List<Node> path1Nodes = doc.selectNodes("/config/action/forward");
		
		List<Node> studentctNodes = doc1.selectNodes("/hibernate-configuration/session-factory/property");
		List<Node> studentctNodes1 = doc1.selectNodes("/hibernate-configuration/session-factory/mapping");
//		System.out.println(studentctNodes.size());
//		System.out.println(pathNodes.size());
//		System.out.println(nameNodes.size());
		System.out.println("----------path值------------");
		for (Node node : pathNodes) {
			Element el=(Element)node;
			String path = el.attributeValue("path");
			System.out.println(path);
		}
		
		System.out.println("----------name值------------");
		for (Node node : nameNodes) {
			Element el=(Element)node;
			String name = el.attributeValue("name");
			System.out.println(name);
		}
		System.out.println("----------redirect值------------");
		for (Node node : redirectNodes) {
			Element el=(Element)node;
			String redirect = el.attributeValue("redirect");
			System.out.println(redirect);
		}
		System.out.println("----------forward里的path值------------");
		for (Node node : path1Nodes) {
			Element el=(Element)node;
			String path = el.attributeValue("path");
			System.out.println(path);
		}
		System.out.println("----------hibernate.cfg.xml的name值------------");
		for (Node node : studentctNodes) {
			Element el=(Element)node;
			String name = el.attributeValue("name");
			System.out.println(name);
		}
		System.out.println("----------hibernate.cfg.xml的resource值------------");
		for (Node node : studentctNodes1) {
			Element el = (Element)node;
			String resource = el.attributeValue("resource");
			System.out.println(resource);
		}
	} catch (DocumentException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	
	
}
}

 config.xml

<?xml version="1.0" encoding="UTF-8"?>
	<!--
		config标签:可以包含0~N个action标签
	-->
<config>
	<!--
		action标签:可以饱含0~N个forward标签
		path:以/开头的字符串,并且值必须唯一 非空
		type:字符串,非空
	-->
	<action path="/regAction" type="test.RegAction">
		<!--
			forward标签:没有子标签; 
			name:字符串,同一action标签下的forward标签name值不能相同 ;
			path:以/开头的字符串
			redirect:只能是false|true,允许空,默认值为false
		-->
		<forward name="failed" path="/reg.jsp" redirect="false" />
		<forward name="success" path="/login.jsp" redirect="true" />
	</action>

	<action path="/loginAction" type="test.LoginAction">
		<forward name="failed" path="/login.jsp" redirect="false" />
		<forward name="success" path="/main.jsp" redirect="true" />
	</action>
</config>

hibernate.cfg.xml 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- 1.数据库相关 -->
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		<property name="connection.url">jdbc:mysql://localhost:3306/t207?useUnicode=true&amp;characterEncoding=UTF-8</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 2.调试相关 -->
		<property name="show_sql">true</property>
		<property name="format_sql">true</property>

		<!-- 开启二级缓存 -->
		<property name="hibernate.cache.use_second_level_cache">true</property>
		<!-- 开启查询缓存 -->
		<property name="hibernate.cache.use_query_cache">true</property>
		<!-- EhCache驱动 -->
		<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
		<!-- 3.实体类映射文件 -->
		<!-- <mapping resource="entity/user.hbm.xml"/> -->
		<mapping resource="entity/worker.hbm.xml" />
		<mapping resource="entity/student.hbm.xml" />
		<mapping resource="entity/user.hbm.xml" />
		<mapping resource="entity/order.hbm.xml" />
		<mapping resource="entity/orderItem.hbm.xml" />
		<mapping resource="entity/treeNode.hbm.xml" />
		<mapping resource="entity/book.hbm.xml" />
		<mapping resource="entity/category.hbm.xml" />




	</session-factory>





</hibernate-configuration>	

 效果图:

 

建包:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值