java DOM4j 循环解析2层XML
2014-02-06 00:15
471 查看
/** * IterateWholeXML.java * com.hao947.XMLUtil * * Function: TODO * * ver date author * ────────────────────────────────── * 2014-2-5 雪藏的心 * * Copyright (c) 2014, inspurworld All Rights Reserved. */ package com.hao947.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; /** * ClassName:IterateWholeXML * Function: TODO ADD FUNCTION * Reason: TODO ADD REASON * * @author 雪藏的心 * @version * @since Ver 1.1 * @Date 2014-2-5 下午2:27:50 * * @see * @deprecated */ /** * ClassName:IterateWholeXMLUtil * Function: TODO ADD FUNCTION * Reason: TODO ADD REASON * * @author 雪藏的心 * @version * @since Ver 1.1 * @Date 2014 2014-2-5 下午3:32:25 * * @see * @deprecated */ public class IterateWholeXMLUtil { /** * iterateWholeXML:(循环解析2层XML) * TODO(这里描述这个方法适用条件 – 可选) * TODO(这里描述这个方法的执行流程 – 可选) * TODO(这里描述这个方法的使用方法 – 可选) * TODO(这里描述这个方法的注意事项 – 可选) * * @param @param filename * @param @return 设定文件 * @return List<Map<String,String>> DOM对象 * @throws * @since CodingExample Ver 1.1 */ public static List<Map<String, String>> iterateWholeXML(String filename) { // 把所得的属性 值 都封装 集合里 List<Map<String, String>> list = new ArrayList<Map<String, String>>(); // 得到解析器 SAXReader reader = new SAXReader(); // 第二步 得到当前XML 文档的Document对象 try { Document document = reader.read(new File(filename)); // 获取document 根目录下 Element root = document.getRootElement(); // 遍历根节点的所有子节点 for (Iterator iter = root.elementIterator(); iter.hasNext();) { // 封装属性值到HashMap 集合里 HashMap<String, String> map = new HashMap<String, String>(); // 遍历所有节点 Element element = (Element) iter.next(); // 判断 element 不等于null if (element == null) continue; // 获取属性和它的值 for (Iterator attrs = element.attributeIterator(); attrs .hasNext();) { // 获取属性 Attribute attr = (Attribute) attrs.next(); // 判断属性 null if (attr == null) continue; // 获取属性 String attrName = attr.getName(); // 获取值 String attrValue = attr.getValue(); // 封装map集合里 把属性和值 map.put(attrName, attrValue); } // 判断 只读 if (element.isReadOnly()) { String elementName = element.getName(); String elementValue = element.getText(); map.put(elementName, elementValue); } else { // 遍历节点的所有孩子节点,并进行处理 for (Iterator iterInner = element.elementIterator(); iterInner .hasNext();) { Element elementInner = (Element) iterInner.next(); // 如果没有孩子节点,则直接取值 if (elementInner == null) { String elementName = element.getName(); String elementValue = element.getText(); map.put(elementName, elementValue); } // 孩子节点的属性 for (Iterator innerAttrs = elementInner .attributeIterator(); innerAttrs.hasNext();) { Attribute innerAttr = (Attribute) innerAttrs.next(); if (innerAttr == null) continue; String innerAttrName = innerAttr.getName(); String innerAttrValue = innerAttr.getValue(); map.put(innerAttrName, innerAttrValue); } // 假设没有第三层嵌套,获得第二层的值 String innerName = elementInner.getName(); String innerValue = elementInner.getText(); map.put(innerName, innerValue); } } // 封装list集合里 list.add(map); } return list; // 返回list 集合里 } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } // 写回方法 public static void writeDocumentToFile(Document document , File filename) throws IOException { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(new FileOutputStream(filename), format); writer.write(document); writer.close(); } // 测试 @Test public void show() { String filename = "products.xml"; List<Map<String, String>> list = IterateWholeXMLUtil .iterateWholeXML(filename); for (Map<String, String> map : list) { for (String ss : map.keySet()) { System.out.println(ss + ":" + map.get(ss)); } } } }
相关文章推荐
- java、Dom4j、循环迭代递归解析XML,不论是否是叶子节点、有复合结构
- Java XML解析工具 dom4j介绍及使用实例
- JAVA解析xml(JDOM,DOM4J)
- (补)Java解析XML之dom4j
- 用dom4j解析xml 报java.lang.NoClassDefFoundError:org/jaxen/JaxenException
- Java程序员从笨鸟到菜鸟之(二十七)XML之Jdom和DOM4J解析 .
- 在java中使用dom4j解析xml
- xml解析---java的DOM,SAX,JDOM,DOM4J
- DOM4J学习笔记 --- Java遍历解析XML
- java使用dom4j解析xml字符串
- java中使用Dom4j的xPath解析xml文件
- java dom4j 解析xml 多节点
- java使用dom4j解析xml文件
- Java_Dom4j_解析xml
- java解析xml方法:DOM解析、SAX解析、JDOM解析、DOM4J解析
- java dom4j 解析xml字符串的操作实例
- java三方---->dom4j解析xml数据
- java中使用dom4j解析xml
- java 解析xml的四种方式:sax,dom,dom4j,jdom
- java解析xml字符串(用dom4j) (转载)