博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dom4J的基本使用
阅读量:6533 次
发布时间:2019-06-24

本文共 10146 字,大约阅读时间需要 33 分钟。

hot3.png

Dom4J的基本使用:

package com.wangbiao.test;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.DOMReader;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import com.wangbiao.vo.Address;import com.wangbiao.vo.User;public class Dom4j_Parse {	// 常用方法	//	// 1.Element 元素API	//	// Method Comment	//	// getQName() 元素的QName 对象	//	// getNamespace() 元素所属的Namespace 对象	//	// getNamespacePrefix() 元素所属的Namespace 对象的prefix	//	// getNamespaceURI() 元素所属的Namespace 对象的URI	//	// getName() 元素的local name	//	// getQualifiedName() 元素的qualified name	//	// getText() 元素所含有的 text 内容,如果内容为空则返回一个空字符串而不是	// null	//	// getTextTrim() 元素所含有的text 内容,其中连续的空格被转化为单个空格,该方法	//	// 不会返回null	// attributeIterator() 元素属性的iterator,其中每个元素都是Attribute 对象	//	// attributeValue() 元素的某个指定属性所含的值	//	// elementIterator() 元素的子元素的iterator,其中每个元素都是Element 对象	//	// element() 元素的某个指定(qualified name 或者local name)的子元素	//	// elementText() 元素的某个指定(qualified name 或者local name)的子元素中	//	// 的text 信息	// getParent 元素的父元素	//	// getPath() 元素的XPath 表达式,其中父元素的qualified name 和子元素的	//	// qualified name 之间使用"/"分隔	// isTextOnly() 是否该元素只含有text 或是空元素	//	// isRootElement() 是否该元素是XML 树的根节点	//	// 2. Attribute 属性API	//	// Method Comment	//	// getQName() 属性的QName 对象	//	// getNamespace() 属性所属的Namespace 对象	//	// getNamespacePrefix() 属性所属的Namespace 对象的prefix	//	// getNamespaceURI() 属性所属的Namespace 对象的URI	//	// getName() 属性的local name	//	// getQualifiedName() 属性的qualified name	//	// getValue() 属性的值			// 解析xml文件	public static List
parseXml(File xmlFile) throws Exception { List
list = new ArrayList
(); StringBuffer structure = new StringBuffer(); // SAXReader解析 SAXReader sax = new SAXReader(); Document doc = sax.read(xmlFile); // DOMReader解析 // DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // DocumentBuilder db = dbf.newDocumentBuilder(); // org.w3c.dom.Document domDocument = db.parse(xmlFile); // DOMReader reader = new DOMReader(); // org.dom4j.Document document = reader.read(domDocument); // 获取根节点 Element root = doc.getRootElement(); structure.append(root.getName()); structure.append("\n"); // 获取所有的子节点 Iterator
user_iterator = root.elementIterator(); // 获取节点名为"User"的子节点 // List e=(List) root.element("User"); // 获取指定名称的第一个子节点 // Element skill = root.element("User"); // 获取节点属性 // Attribute attr1 = skill.attribute("name"); // 按照属性顺序获取属性 // Attribute attr2 = skill.attribute(0); // 获取某节点下全部属性1 // List
list = skill.attributes(); // 获取某节点下全部属性2 // Element skill = root.element("skill"); // for (Iterator
it = skill.attributeIterator(); // it.hasNext();) { // Attribute attr = it.next(); // // TODO // } Map
userAttrMap = new HashMap
(); Map
addressAttrMap = new HashMap
(); while (user_iterator.hasNext()) { Element e = (Element) user_iterator.next(); // 获取节点属性 for (int i = 0; i < e.attributeCount(); i++) { System.out.println(e.attribute(i).getName() + "-" + e.attribute(i).getValue()); } structure.append("------"); structure.append(e.getName()); structure.append("\n"); Iterator
child_iterator = e.elementIterator(); while (child_iterator.hasNext()) { Element e_first = (Element) child_iterator.next(); structure.append("--"); structure.append(e_first.getName()); structure.append("\n"); userAttrMap.put(e_first.getName(), e_first.getText()); if ("Address".equals(e_first.getName())) { Iterator
address_iterator = e_first.elementIterator(); while (address_iterator.hasNext()) { Element e_second = (Element) address_iterator.next(); structure.append("-----------------"); structure.append(e_second.getName()); structure.append("\n"); addressAttrMap.put(e_second.getName(), e_second.getText()); } } } // 开始封装数据 User user = new User(); user.setName(userAttrMap.get("name")); user.setAge(Integer.parseInt(userAttrMap.get("age"))); user.setSex(userAttrMap.get("sex")); Address address = new Address(); address.setProvice(addressAttrMap.get("provice")); address.setCity(addressAttrMap.get("city")); user.setAddress(address); list.add(user); } System.out.println(structure.toString()); return list; } public static boolean generateXml() throws Exception { boolean flag = true; try { Document doc=DocumentHelper.createDocument(); //设置Document type doc.addDocType("hibernate-configuration", "-//Hibernate/Hibernate Configuration DTD 3.0//EN", "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"); Element root=doc.addElement("Information"); Element stu=root.addElement("Student"); stu.addAttribute("name", "zhangsan"); Element stuClass=stu.addElement("class"); stuClass.setText("0302"); //第二种方法增加节点,内容,属性等。先创建节点,属性,然后使用add加入。 Element student=DocumentHelper.createElement("Student"); root.add(student); Attribute attr=DocumentHelper.createAttribute(student,"test","good"); student.add(attr); Element studentClass=DocumentHelper.createElement("class"); studentClass.setText("0303"); student.add(studentClass); //OutputFormat format=OutputFormat.createCompactFormat();xml文件内容紧凑在一起 OutputFormat format=OutputFormat.createPrettyPrint();//推荐用这个,内容排版清晰 format.setEncoding("UTF-8"); FileOutputStream out=new FileOutputStream("D:"+File.separator+"student.xml"); XMLWriter writer=new XMLWriter(out,format); writer.write(doc); writer.close(); } catch (Exception e) { return flag=false; } return flag; } // 修改Xml文件 public static void updateXml(File xmlFile) throws Exception { // DOMReader解析 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); org.w3c.dom.Document domDocument = db.parse(xmlFile); DOMReader reader = new DOMReader(); org.dom4j.Document document = reader.read(domDocument); Element root = document.getRootElement(); Element test = root.element("Test");// // 删除这个属性,但是并没有在Xml中删除,只是在内存中删除了。 // test.remove(test.attribute("test")); List Attrs = test.attributes(); for (Object object : Attrs) { if (object instanceof Attribute) { Attribute attr = (Attribute) object; System.out.println(attr.getName()); } else { throw new Exception("ClassCast Exception!!!!!!!!!"); } } // 删除指点节点 Element address = test.element("Address"); Element name = test.element("name"); test.remove(address); test.remove(name); List list = test.elements(); System.err.println(list.size()); // 修改节点名称和节点值 test.setName("User"); test.setText("1234"); Iterator tests = root.elementIterator(); while (tests.hasNext()) { Element e = (Element) tests.next(); System.out.println(e.getName() + "-" + e.getText()); } // 修改属性值 Attribute addre = test.attribute("test"); addre.setText("new_flag"); Iterator testss = test.elementIterator(); while (testss.hasNext()) { Element e = (Element) testss.next(); System.out.println(e.getName() + "-" + e.getText()); } // 实例代码:把节点,属性,文档等转化成字符串,使用asXML()方法。 String docXmlText = document.asXML(); String rootXmlText = root.asXML(); System.out.println(docXmlText); System.out.println(rootXmlText); // 实例代码:把字符串转换为文档,注意引号需要转义 String skillString = "
神龙摆尾
"; Document d = DocumentHelper.parseText(skillString); String dText = d.asXML(); System.out.println(dText); //visitor //程序会从test节点开始,遍历全部子节点和子属性,注释,CDATA 等,即遍历Test节点内部的全 //部元素,由于我的MyVisitor 只覆写了Element 的处理方法,所以只处理所有的子节点 test.accept(new MyVisitor()); } public static void main(String[] args) throws Exception { List
result = new ArrayList
(); File file = new File("D:" + File.separator + "test.xml"); // result = parseXml(file); // if (result != null && result.size() > 0) { // for (User user : result) { // System.out.println("用户名:" + user.getName() + " 性别 :" // + user.getSex() + " 年龄:" + user.getAge() + " 家庭住址:" // + user.getAddress().getProvice() + "-" // + user.getAddress().getCity()); // } // } updateXml(file); //generateXml(); }}

MyVisitor.java:

package com.wangbiao.test;import org.dom4j.Attribute;import org.dom4j.CDATA;import org.dom4j.Comment;import org.dom4j.Document;import org.dom4j.DocumentType;import org.dom4j.Element;import org.dom4j.Entity;import org.dom4j.Namespace;import org.dom4j.ProcessingInstruction;import org.dom4j.Text;import org.dom4j.VisitorSupport;public class MyVisitor extends VisitorSupport {	@Override	public void visit(Attribute node) {		// TODO Auto-generated method stub		super.visit(node);	}	@Override	public void visit(CDATA node) {		// TODO Auto-generated method stub		super.visit(node);	}	@Override	public void visit(Comment node) {		// TODO Auto-generated method stub		super.visit(node);	}	@Override	public void visit(Document document) {		// TODO Auto-generated method stub		super.visit(document);	}	@Override	public void visit(DocumentType documentType) {		// TODO Auto-generated method stub		super.visit(documentType);	}	@Override	public void visit(Element node) {		System.out.println(node.getName()+"----"+node.getText());	}	@Override	public void visit(Entity node) {		// TODO Auto-generated method stub		super.visit(node);	}	@Override	public void visit(Namespace namespace) {		// TODO Auto-generated method stub		super.visit(namespace);	}	@Override	public void visit(ProcessingInstruction node) {		// TODO Auto-generated method stub		super.visit(node);	}	@Override	public void visit(Text node) {		// TODO Auto-generated method stub		super.visit(node);	}	@Override	public int hashCode() {		// TODO Auto-generated method stub		return super.hashCode();	}	@Override	public boolean equals(Object obj) {		// TODO Auto-generated method stub		return super.equals(obj);	}	@Override	protected Object clone() throws CloneNotSupportedException {		// TODO Auto-generated method stub		return super.clone();	}	@Override	public String toString() {		// TODO Auto-generated method stub		return super.toString();	}	@Override	protected void finalize() throws Throwable {		// TODO Auto-generated method stub		super.finalize();	}}

转载于:https://my.oschina.net/u/617909/blog/127853

你可能感兴趣的文章
git push被忽略的文件 处理
查看>>
C#中用ILMerge将所有引用的DLL打成一个DLL文件
查看>>
PHP生成HTML静态页面
查看>>
服务器启动django
查看>>
Makefile 中:= ?= += =的区别【转】
查看>>
使用makecontext实现用户线程【转】
查看>>
Comet:基于 HTTP 长连接的“服务器推”技术
查看>>
BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
查看>>
四种方法校验数组中是否包含某个指定的字符串
查看>>
29、Java并发性和多线程-非阻塞算法
查看>>
安装OpenResty开发环境
查看>>
第0课 从0开始
查看>>
python class和class(object)用法区别
查看>>
hadoop无法启动DataNode问题
查看>>
java泛型中<?>和<T>区别
查看>>
这里是指推送通知跟NSNotification有区别:
查看>>
Linux中断(interrupt)子系统之一:中断系统基本原理【转】
查看>>
用户ID的代码生成
查看>>
win7经常出现“关闭xxxx前您必须关闭所有会话框”
查看>>
SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
查看>>