dom4j解析xml学习笔记
对于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="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" 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 Stringid;//唯一标示符private StringparentId;//父节点IDpublic 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="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" age="20"/> <user name="ddd" mail="renyi@renyi.com" age="20"/></users></root>
页:
[1]