dom4j生成/解析XML

来源:互联网 发布:gp5吉他谱软件下载 编辑:程序博客网 时间:2024/05/28 20:20

声明:(此文章转载而来,当个人学习记录与积累,纯学习--小菜鸟)

1.生成xml文件

package com.xml.test;import java.io.FileWriter;import java.io.IOException;import java.io.UnsupportedEncodingException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;/** * 使用Dom4j API构建一个Dom4j树,输出为一个XML文档 * @author eastlift *  */public class Dom4jDemo {public static void main(String[] args) {Document doc = DocumentHelper.createDocument();// public Document addProcessingInstruction(String target,// String text)// 添加预处理指令doc.addProcessingInstruction("xml-stylesheet", "type='text/xsl href='student.xsl'");Element root = doc.addElement("students");Element elStu1 = root.addElement("student");Element elName1 = elStu1.addElement("name");Element elGender = elStu1.addElement("gender");Element elAge1 = elStu1.addElement("age");elName1.setText("张三");elGender.setText("男");elAge1.setText("20");Element elStu2 = root.addElement("student");Element elName2 = elStu2.addElement("name");Element elGender2 = elStu2.addElement("gender");Element elAge2 = elStu2.addElement("age");elName2.setText("王五");elGender2.setText("女");elAge2.setText("22");// OutputFormat(空位,是否换行,字符编码);OutputFormat outfm = new OutputFormat("    ", true, "utf-8");try {// 输出至文件XMLWriter xmlw = new XMLWriter(new FileWriter("f://dom4jDemo.xml"), outfm);xmlw.write(doc);xmlw.close();}catch (UnsupportedEncodingException e) {e.printStackTrace();}catch (IOException e1) {e1.printStackTrace();}}}

2.解析(第一种)

package com.xml.test;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.ProcessingInstruction;import org.dom4j.VisitorSupport;import org.dom4j.io.SAXReader;/** * 利用访问者模式,遍历XML文档树 */public class Dom4jVisitorDemo {public static void main(String[] args) {SAXReader saxReder = new SAXReader();try {Document doc = saxReder.read("f:\\dom4jDemo.xml");doc.accept(new myVisitor());}catch (DocumentException e) {e.printStackTrace();}}/** * 访问者, 定义成了内部类,继承VisitorSupport,重写需要的方法 VisitorSupport 实现了 Visitor接口 *  * @author eastlift *  */private static class myVisitor extends VisitorSupport {public void visit(Attribute note) {System.out.println("-=");System.out.println("属性:" + note.getName() + " =" + note.getValue());}public void visit(Element note) {// 判断这个元素是否是只有文本内容,// 如果有文本内容则将文本内容和元素名称打印出来,// 否则只将元素名称打印出来if (note.isTextOnly()) {System.out.println("元素名:" + note.getName() + "  文本  " + note.getText());}else {System.out.println("元素名:" + note.getName());}}// 处理指令public void visit(ProcessingInstruction pi) {System.out.println("处理指令:" + pi.getTarget() + " " + pi.getText());}}}

3.解析(第二种)

package com.xml.test;import java.io.File;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.ElementHandler;import org.dom4j.ElementPath;import org.dom4j.io.SAXReader;/** * Dom4j支持对文档的基于事件的处理。 * 对于较大的XML文档,我们可以利用Dom4j的基于事件处理的模型,在解析的过程中进行处理,而不必等到整个文档解析完再处理。 * 一个元素,对应一个ElementHandler * ElementHandler是一个接口,里面有两个方法,当元素的标签开始时调用onStart(),结束时调用onEnd() 此DEMO的XML文档如下: *  */public class Dom4jElementHandler {public static void main(String[] args) {SAXReader saxReader = new SAXReader();// 两个参数,第一个用于指定元素的路径//saxReader.addHandler("/students/student", new studentHandler());try {saxReader.read(new File("F:\\dom4jDemo.xml"));}catch (DocumentException e) {e.printStackTrace();}}private static class studentHandler implements ElementHandler {public void onStart(ElementPath path) {Element elt = path.getCurrent();System.out.println(elt.attributeValue("sn"));// 两个参数,第一个用于指定元素的路径,可以用相对路径,也可以用相对路径path.addHandler("name", new nameHandler());}public void onEnd(ElementPath path) {path.removeHandler("name");}}private static class nameHandler implements ElementHandler {public void onStart(ElementPath path) {// 两个参数,第一个用于指定元素的路径,这里用了绝对路径,绝对路径是以 "/"开头的path.addHandler("/students/student/age", new ageHandler());}public void onEnd(ElementPath path) {Element elt = path.getCurrent();System.out.println(elt.getName() + "-----" + elt.getText());path.removeHandler("age");}}private static class ageHandler implements ElementHandler {public void onStart(ElementPath path) {}public void onEnd(ElementPath path) {Element elt = path.getCurrent();System.out.println(elt.getName() + "-----" + elt.getText());}}}


原创粉丝点击