XML解析
Java中配置文件的三种配置位置及读取方式
1、 XML和*.properties(属性文件)
2、 存放位置
2、1 存放在src根目录下
Xxx.class.getResourceAsStream("/config.properties");
2.2 与读取配置文件的类在同一包
Xxx.class.getResourceAsStream("config2.properties");
2.3 WEB-INF(或其子目录下)
ServletContext application = this.getServletContext();
InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");
第一种方法:在同包的情况下获取
第二种方法:在不同包的情况下获取,放根目录下,在db.properties前加==/==;
第三种方式:读取WEB-INF, 需要配置servlet
运行的结果:
注意*.properties文件 key=value
#注释
Properties.load(is)
bin 放命令的
config 放tomcat服务配置的
work 临时文件
webapp 发布项目的目录
web-inf
安全目录 含义:不能被外界访问
log 日志
2、 XML的作用
properties文件的解析方式由java.util.properties这个类来完成
xml文件:应该有一个工具类来完成 以下是三种不同解析的工具类
① jdk/jdom dom节点
② sax解析 由上往下解析
③ dom4j解析 由外到内解析
题型:从众多学生中找到小王
package com.zking_xml.parse;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlPerseDemo {
public static void main(String[] args) throws DocumentException {
InputStream in = XmlPerseDemo.class.getResourceAsStream("students.xml");
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(in);
// System.out.println(doc.asXML());
//1.获取到所有的学生
// List<Element> stuEles = doc.selectNodes("/students/student");
// //2.遍历
// for (Element stuEle : stuEles) {
// if("s003".equals(stuEle.attributeValue("sid"))) {
// Element nameEle = (Element)stuEle.selectSingleNode("name");
System.out.println(nameEle.asXML());
// System.out.println(nameEle.getText());
// }
// }
//3.做判断、如果sid=s003那么拿到小王
Element stuEleS003 = (Element)doc.selectSingleNode("students/student[@sid='s003']");
System.out.println(stuEleS003.selectSingleNode("name").getText());
}
}
接下来将要写servlet
package com.xml.parse;
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 = 1L;
@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"));
}
}
最后配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" id="WebApp_ID" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<display-name>liyi_xml</display-name>
<servlet>
<servlet-name>propertiesServlet</servlet-name>
<servlet-class>com.xml.parse.PropertiesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>propertiesServlet</servlet-name>
<url-pattern>/propertiesServlet</url-pattern>
</servlet-mapping>
</web-app>
注意:dom4j+xpath解析xml文件xpath等同数据库的select语句
document.selectNodes(xpath);//查一组
document.selectSingleNode(xpath);//查单个
DOM由节点组成:
① 元素节点
② 属性节点
③ 文本节点