解析XML实例

借用上一篇的方法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.输出结果

 

你可能感兴趣的:(解析XML实例)