目录
前言
一、Java中配置文件的三种配置位置及读取方式
1、配置文件·有啥好处:
2、各个地方的位置有啥讲究
二、dom4j的使用
三、xpath的使用
四、案例
总结
前言
今日分享的是xml的解析,我们话不多说,直接开始
提示:以下是本篇文章正文内容,下面案例可供参考
一、Java中配置文件的三种配置位置及读取方式
1、配置文件·有啥好处:
- 使代码更见灵活
- 维护性更高
2、各个地方的位置有啥讲究
- 使代码更见灵活
- 维护性更高
2、各个地方的位置有啥讲究
同一层级:方便同步编码
图例:
语法:
Demo1.class.getResourceAsStream("db.properties");
代码块:
package com.mgy.parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Demo1 {
public static void main(String[] args) throws Exception {
// 同包
InputStream in = Demo1.class.getResourceAsStream("db.properties");
//.properties文件有一个专门类解析
Properties p=new Properties();
// 此时p 就加载了db.properties中的所有信息
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
效果:
根目录:一般不做频繁的更改
图例:
语法:
Demo1.class.getResourceAsStream("/db.properties");
代码块:
package com.mgy.parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Demo1 {
public static void main(String[] args) throws Exception {
// 根目录
InputStream in = Demo1.class.getResourceAsStream("/db.properties");
//.properties文件有一个专门类解析
Properties p=new Properties();
// 此时p 就加载了db.properties中的所有信息
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
效果:
web-inf:安全目录
图例:
语法:
context.getResourceAsStream("/WEB-INF/db.properties");
代码块:
package com.mgy.parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/a")
public class WebInfServlet extends HttpServlet{
@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 {
// req.getRequestDispatcher("/WEB-INF/a.jsp").forward(req, resp);
// 拿到servlet上下文
InputStream in = req.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
Properties p=new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
效果:
注意:同包和根目录都是要用类名去点class,而web-inf则不同
二、dom4j的使用
四个常用方法:
- selectNodes 获取多个标签
- selectSingleNode 获取单个标签
- attributeValue 获取属性值
- getText 获取标签值
使用方法:
package com.mgy.parse;
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 Demo2 {
public static void main(String[] args) throws Exception {
InputStream in = Demo2.class.getResourceAsStream("students.xml");
SAXReader sr=new SAXReader();
// 将配置文件中的所有内容获取到了
Document doc = sr.read(in);
// selectNodes 根据标签名,返回标签名
// System.out.println(doc.asXML());
// List studentsEles = doc.selectNodes("students");
// System.out.println(studentsEles.size();
// selectNodes 根据标签名,返回单个标签,通常用于已知晓该标签只会出现一次
Element studentsEle=(Element)doc.selectSingleNode("students");
List studentEles = studentsEle.selectNodes("student");
for (Element stuEle : studentEles) {
System.out.println(stuEle.attributeValue("sid"));//attributeValue是拿到属性值
System.out.println(stuEle.selectSingleNode("name").getText());//getText拿到标签里的内容
}
}
}
效果:
三、xpath的使用
1、语法
①/代表层级,代表查找
②@代表属性,精准定位
2、案例
package com.mgy.parse;
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 Demo3 {
public static void main(String[] args) throws Exception {
//*[@id="_layout"]/div/div[2]/section/div[5]/div[2]/div[2]/ul/li/div[2]/p[1]
// /代表层级,代表查找
// @精准定位
InputStream in = Demo3.class.getResourceAsStream("students.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(in);
// Element stus002 = (Element)doc.selectSingleNode("/students/student[@sid='s002']/name");
// System.out.println(stus002.getText());
Element studentsEle = (Element)doc.selectSingleNode("students");
List stuEles = studentsEle.selectNodes("student");
for (Element stuEle : stuEles) {
if("s002".equals(stuEle.attributeValue("sid"))) {
System.out.println(stuEle.selectSingleNode("name").getText());
}
}
}
}
四、案例
1、获取所有action中的type的值
package com.mgy.asc;
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 Demo1 {
public static void main(String[] args) throws Exception {
InputStream in = Demo1.class.getResourceAsStream("config.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(in);
Element asc = (Element)doc.selectSingleNode("config");
List ls = asc.selectNodes("action");
for (Element element : ls) {
System.out.println(element.attributeValue("type"));
}
}
}
效果:
2、获取第二个action中的type的值
package com.mgy.asc;
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 Demo2 {
public static void main(String[] args) throws Exception {
InputStream in = Demo1.class.getResourceAsStream("config.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(in);
Element asc = (Element)doc.selectSingleNode("/config/action[@path='/loginAction']");
System.out.println(asc.attributeValue("type"));
}
}
效果:
3、获取第二个action的所有forward的path
package com.mgy.asc;
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 Demo3 {
public static void main(String[] args) throws Exception {
InputStream in = Demo3.class.getResourceAsStream("config.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(in);
Element asc = (Element)doc.selectSingleNode("config");
List ls = asc.selectNodes("action/forward");
for (Element element : ls) {
System.out.println(element.attributeValue("path"));
}
}
}
效果:
4、获取第二个action的第二个forward的path
package com.mgy.asc;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo4 {
public static void main(String[] args) throws Exception {
InputStream in = Demo4.class.getResourceAsStream("config.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(in);
Element asc = (Element)doc.selectSingleNode("/config/action[@path='/loginAction']/forward[@name='b']");
System.out.println(asc.attributeValue("path"));
}
}
效果:
总结
以上就是要分享的内容,希望对大家有所帮助。



