本篇博客主要使用实例讲解如何使用om4j解析xml文件,不会对源码做分析。直接结合代码进行说明。
测试解析的xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<changeFileName>
<transactionInfo>
<detail name="sourceDirectory" value="C:\log"></detail>
<detail name="destDirectory" value="C:\log"></detail>
<detail name="timeSerialNumer" value="20180521"></detail>
<detail name="indexSerialNumber" value="10"></detail>
<detail name="databaseUser" value="zhuyuqiang"></detail>
<detail name="tableName" value=""></detail>
<detail name="userFileNameAsTableName" value="true"></detail>
<detail name="userUM" value="zhuyuqiang296"></detail>
<detail name="fileType" value=".sql"></detail>
<detail name="splitSymbol" value="_"></detail>
</transactionInfo>
</changeFileName>
解析xml方法如下:
//传入待解析的xml文件名
private static List<TransactionInfo> parserByDom4j(String configFileName){
//实例化SAXReader对象
SAXReader reader = new SAXReader();
List<TransactionInfo> infos = new ArrayList<>();
try {
//根据输入的xml文件创建Document对象
org.dom4j.Document document = reader.read(new File(configFileName));
org.dom4j.Element root = document.getRootElement();
List<org.dom4j.Element> elements = root.elements("transactionInfo");
for(org.dom4j.Element element : elements){
List<org.dom4j.Element> es = element.elements("detail");
TransactionInfo info = new TransactionInfo();
for(org.dom4j.Element e : es){
String propertyName = e.attribute("name").getValue();
String propertyValue = e.attribute("value").getValue();
populateBean(info,propertyName,propertyValue);
}
infos.add(info);
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return infos;
}
Dom4j的解析与JDOM的解析类似,都是通过遍历子节点的内容,解析子节点的内容。
打印出的log信息如下:
[ sourceDirectory = C:\log, destDirectory = C:\log , timeSerialNumber = 20180521 , indexSerialNumber = 10 , databaseUser = zhuyuqiang , tableName = , userFileNameAsTableName = true , userUM = zhuyuqiang296 , fileType = .sql , splitSymbol = _]
通过打印的信息,方法已经将xml的所有信息成功解析了。