xml解析
前言
关于xml的解析,在早前的博文已经写过了,这次给大家带来更详细的2.0版本
之前的链接
xml文件和properties配置文件解析的方式
对于xml文件来说,现在主要作配置文件去配置信息使用,现在给大家看一下它的解析过程:
Properties文件解析:
文件内容:
uname=mybatis_ssm
upass=xiaoli
解析demo:
package com.dawnx;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Demo1 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//获取配置文件路径
InputStream in = Demo1.class.getResourceAsStream("db.properties");
//实例化properties
Properties p = new Properties();
//读取配置文件信息
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
结果:
mybatis_ssm
xiaoli
这里的properties文件在同一包下
如果是不同包,在src下的配置文件,则需要在获取资源时加个/
//获取配置文件路径
InputStream in = Demo1.class.getResourceAsStream("/db.properties");
上面是properties文件的解析,下面看dom4j解析xml文件:
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>
demo:
package com.dawnx;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Properties;
import org.apache.jasper.tagplugins.jstl.core.ForEach;
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 IOException, DocumentException {
// TODO Auto-generated method stub
//加载配置文件
InputStream in = Demo3.class.getResourceAsStream("/students.xml");
//实例化dom4j对象
SAXReader r=new SAXReader();
//读取信息流
Document d = r.read(in);
//dom4j读取元素节点
List<Element> list = d.selectNodes("/students/student");
//遍历节点集合
for (Element el : list) {
//获取元素节点属性值是否为指定值,如果是,获取姓名输出
if("s002".equals(el.attributeValue("sid"))) {
Node n =(Node)el.selectSingleNode("name");
System.out.println("sid="+el.attributeValue("sid")+",name="+n.getText());
}
}
}
}
结果:
sid=s002,name=小芳
这里解析的是src下面的xml,同properties解析一样,如果是同一包下,不用加/
,否则需要…
dom4j+xpath:
package com.dawnx;
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 abstract class Demo4 {
public static void main(String[] args) throws DocumentException {
//读取信息
InputStream in = Demo4.class.getResourceAsStream("/students.xml");
//实例化dom4j
SAXReader read=new SAXReader();
//读取信息流
Document doc = read.read(in);
//用xpath找指定元素节点属性
Element node =(Element)doc.selectSingleNode("/students/student[@sid='s002']");
Element ele =(Element)node.selectSingleNode("name");
System.out.println("sid="+node.attributeValue("sid")+",name="+ele.getText());
}
}
结果:
sid=s002,name=小芳
大家可以看到,dom4j+xpath解析相对于dom4j解析来说,要减少点代码,原因就是xpath可以获取指定元素节点的指定属性,也就是这行代码:
Element node =(Element)doc.selectSingleNode("/students/student[@sid='s002']");
dom4j+xpath的结合使用,可以更灵活和方便
web.inf下的xml文件的解析:
package com.dawnx;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContext;
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(name="demo",urlPatterns="/demo")
public class DemoServlet extends HttpServlet{
@Override
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 {
// TODO Auto-generated method stub
//获取上下文
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"));
}
}
结果:
mybatis_ssm
xiaoli
在使用解析的时候,一定要注意的细节地方就是路径问题,同包不用加/,配置文件在src下,一定要加!!!
尾言
最后有问题欢迎大家指出,溜了溜了…