在开发web应用时,几乎所有的框架实现机制都大量的包含xml配置文件,那么如何解析xml文件呢?简单介绍几个有用的dom4j解析xml的方法。
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<controller>
<package>
<action name="login" class= "com.haha" method="post">
<result name="success">/LoginSuccess.jsp</result>
<result name="failure">/Login.jsp</result>
</action>
</package>
</controller>
首先,获取SAXReader对象。SAXReader封装了一个IO流,即在xml文件中读取数据。
SAXReader reader = new SAXReader();
获取Document对象。
Document document = reader.read(new File("src/com/controller.xml"));
这里文件路径要在src源码包下开始写,不然找不到xml文件。(我也不懂为什么,按说相对路径可以找到才对)
Element root = document.getRootElement(); //获得root节点<controller>
//System.out.println(root.getName());
Element pack = root.element("package"); //直接获取到package节点
List<Element> actions = pack.elements();
for(Element action : actions) {
ActionConfig config = new ActionConfig(); //创建一个ActionConfig对象,一个javabean对象
String actionName = action.attributeValue("name");
String actionMethod = action.attributeValue("method");
String actionClzName = action.attributeValue("class");
System.out.println(actionName+"--"+actionMethod);
config.setName(actionName);
config.setClsName(actionClzName);
if(actionMethod == null || actionMethod.equals("")) { //若方法为空,则默认执行execute方法
actionMethod = "execute";
}
config.setMehtod(actionMethod);
//获取每个action的result节点
List<Node> results = action.selectNodes("result"); //选节点名为result的节点 ,Node可以直接定位到某个节点
Iterator<Node> it = results.iterator();
while(it.hasNext()) {
Element result = (Element)it.next(); //这里注意,可以直接将Node节点强制转为Element类型,以方便
String resultName = result.attributeValue("name"); //获取到该节点的属性值以及标签内容
String resultForword = result.getText();
System.out.println(resultForword);