一、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