由于前段时间项目中用到来xml配置文件,需要去解析,下面记录一下使用dom4j来解析xml的简单操作
1. 获取xml信息
/**
* 获取xml信息
* @param filename 文件相对路径
*/
public static Document load(String filename) {
Document document = null;
try {
SAXReader saxReader = new SAXReader();
//使用spring的文件读取方法:org.springframework.core.io.Resource
Resource resource = new ClassPathResource(filename);
document = saxReader.read(resource.getFile()); // 读取XML文件,获得document对象
} catch (Exception ex) {
ex.printStackTrace();
}
return document;
}
reader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就代表了整个XML。
读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各处的编码名称保持一致即可
1.获取根节点
root元素是xml文档的根节点。一切XML分析都是从Root元素开始的
//获取xml文档
Document document = load("conf/test.xml");
//获取xml的根节点
Element root = document.getRootElement();
2. 常用到的方法
#获得根元素下的所有子节点。
List<Element> elementList=root.elements();
#获得element节点的名字
String elementName=element.getName();
#获得element节点的文本节点值
String elementValue=element.getText();
#获得element节点的属性
Attribute attribute=element.attribute();
#获得属性值
String attrValue=element.attributeValue("attrName");
3. xml遍历
xml节点的遍历有如下方式:
//方式一: 枚举所有子节点
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
//TODO 获取相关节点信息和操作
}
//方式二: 枚举名称为foo的节点
for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
Element foo = (Element) i.next();
//TODO 获取相关节点信息和操作
}
//方式三 枚举属性
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
//TODO 获取相关节点信息和操作
}
//方式四: 循环遍历子节点
List<Element> elementList=root.elements();
for(int i=0;i<elementList.size(); i++){
Element element = (Element) elementList.get(i);
//TODO 获取相关节点信息和操作
//子节点遍历
List elementRoot = element.elements();
//判断是否存在子节点
if(null!=elementRoot && elementRoot.size()>0){
//递归调用此方法
//TODO 相关操作
}
}