XML解析
1. Java中配置文件的三种配置位置及读取方式
首先你要写一个xxx.properties文件(例如:db.properties)
如下图:
而文件的内容你可以写如下:
uname=mybatis_ssm
upass=xiaoli
url=jdbc:mysql://localhost:3306/mybatis_ssm
driver_Class=com.mysql.jdbc.Driver
initPoolSize=5
maxPoolSize=20
之后想获取其中的内容,首先编写代码了:
第一种方法:(src根目录下)同级的时候
package com.bowen.prase;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 读取同级目录下的配置
* (xml properties)
* @author 125x
*
*/
public class Demo1 {
public static void main(String[] args) throws Exception {
//读取同包下的配置文件
InputStream in= Demo1.class.getResourceAsStream("db.properties");
Properties ps=new Properties();
//将读取的配置文件对应的流对象交给properties进行管理
ps.load(in);
System.out.println(ps.getProperty("uname"));
System.out.println(ps.getProperty("upass"));
}
}
第二种方法:( 与读取配置文件的类在同一包)
首先你需要创建一个配置包(conf)把(db.properties)文件放进去;
如下图:
之后:
package com.bowen.prase;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 读取项目路径下的配置文件
* (xml properties)
* @author 125x
*
*/
public class Demo2 {
public static void main(String[] args) throws Exception {
//读取同包下的配置文件
InputStream in= Demo2.class.getResourceAsStream("/db.properties");
Properties ps=new Properties();
//将读取的配置文件对应的流对象交给properties进行管理
ps.load(in);
System.out.println(ps.getProperty("uname"));
System.out.println(ps.getProperty("upass"));
}
}
其实改的不多,就是在(db.properties)文件加了一个 ( / );
第三种方法: WEB-INF(或其子目录下)
首先你要编写一个servlet文件:
package com.bowen.prase;
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("/demo3")
public class DemoServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取web-inf下的配置文件
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"));
//req.getRequestDispatcher("/WEB-INF/b.jsp").forward(req, resp);
}
}
如上代码最后得到(db.properties文件)的中这两个值就OK了:
2.XML的作用
dom4j+xpath解析xml文件 xpath等同数据库的select语句
首先我们要导一个xml文件
内容如下(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.bowen.prase;
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;
/**
* 讲解如何解析xml,获取其中想要得到的内容
*
* xml解析技术:
* domj4 sax解析 jdom解析
* @author 125x
*
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
InputStream in= Demo4.class.getResourceAsStream("students.xml");
SAXReader reader=new SAXReader();
//将配置文件加进去
Document doc=reader.read(in);
System.out.println(doc.asXML());
}
}
运行之后:
会把里面所有内容都打印出来,但是我们有时候就是查一个而已,所依我们就出现了(xpath 八爪鱼 按照查找目录的方式去查找xml内容)
package com.bowen.prase;
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;
/**
* 讲解如何解析xml,获取其中想要得到的内容
*
* xml解析技术:
* domj4 sax解析 jdom解析
* @author 125x
*
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
InputStream in= Demo4.class.getResourceAsStream("students.xml");
SAXReader reader=new SAXReader();
//将配置文件加进去
Document doc=reader.read(in);
//System.out.println(doc.asXML());
//xpath 八爪鱼 按照查找目录的方式去查找xml内容
//第一种
List<Element> stu= doc.selectNodes("/students/student");
for (Element stuEle : stu) {
//System.out.println(stuEle.asXML());
//获取sid的属性值与说2002进行对比,如果是那么就取出name标签对应的值
if("s002".equals(stuEle.attributeValue("sid"))) {
Element namestu= (Element) stuEle.selectSingleNode("name");
//获取文本内容
System.out.println("第一种");
System.out.println(namestu.asXML()+"---"+namestu.getText());
System.out.println("----");
}
}
//第二种:
Element s002= (Element) doc.selectSingleNode("/students/student[@sid='s002']");
System.out.println("第二种");
System.out.println(s002.asXML());
Element s=(Element) s002.selectSingleNode("name");
System.out.println(s.getText());
System.out.println("-------");
}
}
最后的输出结果如下图:
document.selectNodes(xpath);//查一组
document.selectSingleNode(xpath);//查单个
confin案例:
下面展示一些 内联代码片
。
package com.bowen.prase;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* @author 125x
* 作业:config.xml解析con
1、获取所有action中的type的值
2、获取第二个action中的type的值
3、获取第二个action的所有forward的path
4、获取第二个action的第二个forward的path
*
*/
public class work {
public static void main(String[] args) throws Exception {
//读取同级目录下的配置文件
InputStream in = work.class.getResourceAsStream("config.xml");//得到对应的流
SAXReader reader = new SAXReader();//dom4j的
Document doc=reader.read(in);//dom4j的,抛出异常
//1、获取所有action中的type的值
List<Element> stuEles = doc.selectNodes("/config/action");
for (Element e : stuEles) {
System.out.println(" 1、获取所有action中的type的值"+e.attributeValue("type"));
//2.获取第二个action中的type的值
if("/loginAction".equals(e.attributeValue("path"))) {
System.out.println("2.获取第二个action中的type的值"+e.attributeValue("type"));
}
}
// 3、获取第二个action的所有forward的path
List<Element> foeEle =doc.selectNodes("/config/action[@type='test.LoginAction']/forward");
for (Element e : foeEle) {
// 3、获取第二个action的所有forward的path
System.out.println("3、获取第二个action的所有forward的path"+e.attributeValue("path"));
// 4、获取第二个action的第二个forward的path
if("success".equals(e.attributeValue("name"))) {
System.out.println("4、获取第二个action的第二个forward的path"+e.attributeValue("path"));
}
}
}
}
结果如下