因为工作缘故,需要对Tomcat配置文件server.xml进行解析,导出层级关系到数据库,查找相关资料,再加上在同事的帮助下,解决了这个问题,代码如下:
package com.test;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4j {
class ParChlNode{
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public String getChild() {
return child;
}
public ParChlNode(String parent, String child) {
super();
this.parent = parent;
this.child = child;
}
public void setChild(String child) {
this.child = child;
}
String parent;
String child;
}
private List<ParChlNode> listElementRel = null;
public static void main(String[] args) throws Exception{
Dom4j dom4j = new Dom4j();
dom4j.readXML();
}
public void readXML() throws DocumentException{
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
Document document = reader.read(new File("D:\\Apache-tomcat\\apache-tomcat-7.0.78\\conf\\server.xml"));
//获取根节点元素对象
Element node = document.getRootElement();
//String name = node.getName();
//String nodes = document.getDocument().getName();
//遍历所有的元素节点
//System.out.println(name);
//System.out.println(nodes);
//elementMethod(node);
listElementRel = new ArrayList<ParChlNode>();
listNode(node);
for(ParChlNode parNode: listElementRel){
System.out.print("key的值是:"+parNode.getParent()+";");
System.out.println("value的值是:"+parNode.getChild());
}
}
public void listNode(Element node) {
/* @SuppressWarnings("unchecked")
List<Attribute> list = node.attributes();
// 遍历属性节点
for (Attribute attr : list) {
String attrs = attr.getName();
//System.out.println("节点内容名称:"+attrs); //attr.getText() + "-----" + "---" + attr.getValue()
}
if (!(node.getTextTrim().equals(""))) {
//System.out.println("文本内容::::" + node.getText());
}
*/
// 当前节点下面子节点迭代器
@SuppressWarnings("unchecked")
Iterator<Element> it = node.elementIterator();
// 遍历
while (it.hasNext()) {
// 获取某个子节点对象
Element e = it.next();
// 对子节点进行遍历
listNode(e);
listElementRel.add(new ParChlNode(node.getName(), e.getName()));
//System.out.println("e:"+e.getName());
}
}
}
下面为生成的结果:
key的值是:Server;value的值是:Listener
key的值是:Server;value的值是:Listener
key的值是:Server;value的值是:Listener
key的值是:Server;value的值是:Listener
key的值是:Server;value的值是:Listener
key的值是:Server;value的值是:Listener
key的值是:GlobalNamingResources;value的值是:Resource
key的值是:Server;value的值是:GlobalNamingResources
key的值是:Service;value的值是:Connector
key的值是:Service;value的值是:Connector
key的值是:Realm;value的值是:Realm
key的值是:Engine;value的值是:Realm
key的值是:Host;value的值是:Valve
key的值是:Engine;value的值是:Host
key的值是:Service;value的值是:Engine
key的值是:Server;value的值是:Service