目录
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&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>
效果图:
建包: