一、pom文件引入dom4jjar包:
<!-- org.dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
</dependency>
二、SAXReader类说明
实现对xml文件的解析,主要使用到的是dom4j中的SAXReader类,该类的使用方法如下:
//构造SAXReader
SAXReader sr = new SAXReader();
//加载文件
Document doc = sr.read(File file)
//Document对象代表XML文件在内存中的印象
Element getRootElement()//取得根元素
Element.getName()
Element.elements() //取得该元素下的所有直接子元素
Element.elementText("str") //从一个元素导航到另一个元素,并取出该元素的文本
Element.element("str"); //导航到另一个元素
Element.attributeValue("str"); //取得该元素对应的属性
二、解析xml格式数据到list<JavaObj>
List<ExpressionItemVo> list = new ArrayList<ExpressionItemVo>();
try {
//1.创建一个SAXBuilder的对象
SAXReader reader = new SAXReader();
Document doc = reader.read(new InputSource(new ByteArrayInputStream(dto.getBdsxml().getBytes("UTF-8"))));//dom4j读取
// 2.通过document对象获取xml文件的根节点
Element root = doc.getRootElement();//获得根节点
List<Element> elementList = root.elements();
int elementXh = 1;
for (Element foo : elementList) {
ExpressionItemVo obj = new ExpressionItemVo();
obj.setItemXh("item_" + elementXh);
Field[] properties = obj.getClass().getDeclaredFields();//获得实例的属性
//实例的set方法
Method setmeth;
//遍历实体类的属性
for (int j = 0; j < properties.length; j++) {
//实例的set方法
if (properties[j].getName().equals("itemXh")) {//序号手动赋值
continue;
} else {
setmeth = obj.getClass().getMethod(
"set"
+ properties[j].getName().substring(0, 1).toUpperCase()
+ properties[j].getName().substring(1), properties[j].getType());
Object setStr = foo.elementText(properties[j].getName());
if (foo.elementText(properties[j].getName()) != null&&!"".equals(foo.elementText(properties[j].getName()))) {
if (properties[j].getType() == java.util.Date.class) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date sj = df.parse(foo.elementText(properties[j].getName()));
setStr = sj;
} else if (properties[j].getType() == java.lang.Integer.class) {
setStr = Integer.parseInt(foo.elementText(properties[j].getName()));
} else if (properties[j].getType() == java.lang.Character.class) {
setStr = foo.elementText(properties[j].getName()).charAt(0);
}else if (properties[j].getType() == java.lang.Double.class) {
setStr = Double.parseDouble(foo.elementText(properties[j].getName()));
}
} else {
setStr = null;
}
//将对应节点的值存入
setmeth.invoke(obj, setStr);
}
}
list.add(obj);
elementXh ++;
}
} catch (Exception e) {
e.printStackTrace();
}
注意:
1)javaBean中的首字母大小写要和xml格式中的属性值首字母大小写一致;
参照网址:
1)dom4j解析xml文件方式:
https://blog.csdn.net/iopfan/article/details/68484779
https://www.cnblogs.com/514929hgy/p/9143182.html
3)使用dom4j解析xml文件,并封装为javabean对象
https://blog.csdn.net/zhaofuqiangmycomm/article/details/78414830