借用上一篇的方法convertStreamToString(InputStream is)和convertStringToDocument(String xmlString)解析ParseXML.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<FileInfo>
<FilePojo row="0010" col="0001">
<fid>001</fid>
<pkg>
<rowInfo>1</rowInfo>
<colInfo>1</colInfo>
</pkg>
<pkg>
<rowInfo>2</rowInfo>
<colInfo>2</colInfo>
</pkg>
</FilePojo>
</FileInfo>
1.首先将输入流InputStream is转换成字符串,然后将xmlString转化为Document文件,在使用dom4j进行解析
@SuppressWarnings("unchecked")
@org.junit.Test
public void testXML() {
String path = "";
// 定义变量
InputStream is = null;
OutputStream toClient = null;
Document doc = null;
try {
is = new FileInputStream("C:/ParseXML.xml");
//将流转化为字符串
String str = convertStreamToString(is);
doc = convertStringToDocument(str);
// 获取根元素
Element root = doc.getRootElement();
// 得到根元素下所有名字为FilePojo的子元素
List<Element> filePojos = root.elements("FilePojo");
// 循环<FilePojo>标签
for (Element filePojo : filePojos) {
List<Attribute> distination = filePojo.attributes();
long row = Long.parseLong(distination.get(0).getStringValue()
.trim());
long col = Long.parseLong(distination.get(1).getStringValue()
.trim());
// 获取fid值
Element tarFlow = filePojo.element("fid");
long flow = Long.parseLong(tarFlow.getStringValue().trim());
// 获取FilePojo元素下所有的名为pkg的子元素
List<Element> pkgs = filePojo.elements("pkg");
for (Element pkg : pkgs) {
List<Element> rowInfoList = pkg.elements("rowInfo");
List<Element> colInfoList = pkg.elements("colInfo");
ArrayList<Integer> rowInfoArray = new ArrayList<Integer>();
ArrayList<Integer> colInfoArray = new ArrayList<Integer>();
for (Element sbnStr : rowInfoList) {
rowInfoArray.add(Integer.parseInt(sbnStr.getStringValue()
.trim()));
}
for (Element esiStr : colInfoList) {
colInfoArray.add(Integer.parseInt(esiStr.getStringValue()
.trim()));
}
Integer[] sbn = (Integer[]) rowInfoArray
.toArray(new Integer[rowInfoArray.size()]);
Integer[] esi = (Integer[]) colInfoArray
.toArray(new Integer[colInfoArray.size()]);
for (int i = 0; i < sbn.length; i++) {
// 获取当前时间
SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");
String time = f.format(new Date());
// 拼装文件夹名称
String reTransFolderName = path + time +"_ReTran";
// 拼装文件名
reTransFolderName = reTransFolderName + "/" + time + "_"
+ String.valueOf(flow) + "_" + String.valueOf(row) + "_"
+ String.valueOf(col) + "_" + String.valueOf(sbn[i]) + "_"
+ String.valueOf(esi[i]);
System.out.println("文件名:" + reTransFolderName);
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
if (toClient != null) {
toClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.输出结果