对于dom4j我是在今年暑假接触的.今天我想把xml文件解析成JAVA对象.
1、下载dom4j-1.6.1.jar包。
2、新建一工程web。在WebContent目录下创建users.xml文件
<?xml version="1.0" encoding="UTF-8"?> <root> <users> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> </users> </root>
3、创建一个Bean——ElementNode.java
package com.test.learn_xml.dto; import org.dom4j.Element; public class ElementNode { private Element element; private String id;//唯一标示符 private String parentId;//父节点ID public Element getElement() { return element; } public void setElement(Element element) { this.element = element; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } }
4、创建一个class——main.java
package com.inspur.learn_xml.action; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import com.test.learn_xml.dto.ElementNode; public class do4jMain { /** * @param args */ static int num = 0; static List<ElementNode> elementNodes = new ArrayList<ElementNode>(); public static void main(String[] args) { String fileUrl = "WebContent/xml/users.xml"; readModels(fileUrl); showElements(); fileUrl = "WebContent/xml/test.xml"; createXmlDoc(fileUrl); } public static void readModels(String fileUrl) { SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(new File(fileUrl));//读取XML文件 Element root = document.getRootElement();//得到根节点 ElementNode elementNode = new ElementNode(); elementNode.setElement(root); elementNode.setId("0"); elementNode.setParentId(""); elementNodes.add(elementNode);//把根节点加入到容器中去。 num++; for(int i = 0;i < elementNodes.size();i++) { List<Element> elements = new ArrayList<Element>(); elements = elementNodes.get(i).getElement().elements();//得到第i个节点的所有子节点 for(int j = 0;j < elements.size();j++) { ElementNode node = new ElementNode(); node.setParentId(String.valueOf(i)); node.setElement(elements.get(j)); node.setId(String.valueOf(num)); elementNodes.add(node); num++; } } }catch (Exception e) { e.printStackTrace(); } } public static String createXmlDoc(String fileUrl) { Document document = DocumentHelper.createDocument(); document.setXMLEncoding("UTF-8"); try { Element root = document.addElement("root") ;//创建根节点 System.out.println("即将生成新的文件"); elementNodes.get(0).setElement(root); int i = 0; int childNums = 0; while(i < elementNodes.size()) { childNums = elementNodes.size(); for(int j = i+1; j < childNums; j++) { if(elementNodes.get(i).getId().equals(elementNodes.get(j).getParentId())) { List<Attribute> attributes = new ArrayList<Attribute>(); attributes = elementNodes.get(j).getElement().attributes(); Element element = elementNodes.get(i).getElement().addElement(elementNodes.get(j).getElement().getName()); element.setText(elementNodes.get(j).getElement().getText()); element.setAttributes(attributes); elementNodes.get(j).setElement(element); } } i++; } try { OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter output = new XMLWriter(new FileOutputStream( new File(fileUrl) ), format); output.write( document ); output.close(); System.out.println("文件已经生成,"+fileUrl); } catch(IOException e) { System.out.println(e.getMessage()); } } catch (Exception e) { e.printStackTrace(); } finally { return fileUrl; } } }
5、结果:
<?xml version="1.0" encoding="UTF-8"?> <root> <users> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> <user name="ddd" mail="[email protected]" age="20"/> </users> </root>