1.使用dom4j创建XML文件
Document doc = DocumentHelper.createDocument(); doc.addProcessingInstruction("xml-stylesheet", "type='text/xsl' href='student.xsl'"); // 创建根元素 // Element root = DocumentHelper.createElement("students"); // doc.setRootElement(root); Element root = doc.addElement("students"); Element stu1 = root.addElement("student"); Element stu1Name = stu1.addElement("name"); Element stu1Age = stu1.addElement("age"); stu1Name.setText("zhangsan"); stu1Age.setText("23"); Element stu2 = root.addElement("student"); Element stu2Name = stu2.addElement("name"); Element stu2Age = stu2.addElement("age"); stu2Name.setText("lisi"); stu2Age.setText("24"); Element stu3 = root.addElement("student"); Element stu3Name = stu3.addElement("name"); Element stu3Age = stu3.addElement("age"); stu3Name.setText("wangwu"); stu3Age.setText("25"); // 自定义格式化 // OutputFormat format = new OutputFormat(); // format.setIndent(" "); // format.setNewlines(true); // format.setEncoding("gbk"); // 调用dom4j默认常量 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gbk"); try { XMLWriter writer = new XMLWriter(format); writer.write(doc); writer.close(); // writer.flush(); // PrintWriter out = new PrintWriter(System.out); // doc.write(out); // out.close(); } catch (IOException e) { e.printStackTrace(); }
2.xml文件的解析(访问者模式)
public static void main(String[] args) { SAXReader saxReader = new SAXReader(); Document doc = null; try{ doc = saxReader.read(new File("student.xml")); doc.accept(new MyVistor()); }catch(DocumentException e){ e.printStackTrace(); } } private static class MyVistor extends VisitorSupport{ public void visit(Attribute node) { System.out.println("Attribute:"+node.getName()+"="+node.getValue()); } public void visit(Element node) { if(node.isTextOnly()){ System.out.println("Element:"+node.getName()+"="+node.getText()); }else{ System.out.println("----------"+node.getName()+"--------"); } } public void visit(ProcessingInstruction node) { System.out.println("PI:"+node.getName()+"="+node.getText()); } }
3.Handler的使用
public static void main(String[] args) { SAXReader saxReader = new SAXReader(); saxReader.addHandler("/students/student",new StudentHandler()); try{ saxReader.read(new File("student.xml")); }catch(DocumentException e){ e.printStackTrace(); } } private static class StudentHandler implements ElementHandler { public void onStart(ElementPath path) { Element elt = path.getCurrent(); System.out.println("Founnd student:"+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){ System.out.println(path.getPath()); } public void onEnd(ElementPath path){ Element elt = path.getCurrent(); System.out.println(elt.getName()+":"+elt.getText()); } }
4.使用dom4j对xml文件的综合操作
// 修改xml文件 public int modifyXMLFile(String fileName, String newFileName) throws Exception { int returnValue = 0; SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(fileName)); try { List list = document.selectNodes("/books/book/@show"); Iterator iter = list.iterator(); while (iter.hasNext()) { Attribute attribute = (Attribute) iter.next(); if (attribute.getValue().equals("yes")) { attribute.setValue("no"); } } list = document.selectNodes("books/owner"); iter = list.iterator(); if (iter.hasNext()) { Element ownerElement = (Element) iter.next(); ownerElement.setText("xiaocai"); Element dateElement = ownerElement.addElement("date"); dateElement.setText("2010-06-02"); dateElement.addAttribute("type", "Gregorian calendar"); } list = document.selectNodes("books/book"); iter = list.iterator(); while (iter.hasNext()) { Element bookElement = (Element) iter.next(); Iterator iterator = bookElement.elementIterator(); while (iterator.hasNext()) { Element titleElement = (Element) iterator.next(); if (titleElement.getText().equals("zhangsan title")) { bookElement.remove(titleElement); } } } } catch (RuntimeException e) { throw e; } try { XMLWriter writer = new XMLWriter(new FileWriter(new File( newFileName))); writer.write(document); writer.flush(); returnValue = 1; } catch (Exception e) { throw e; } return returnValue; } /** * 格式化xml文件 * OutputFormat format = new OutputFormat(); * format.setIndent(" "); * format.setNewlines(true); format.setEncoding("gbk"); */ public int formatXML(String fileName) throws Exception { /** 格式化输出,类型IE浏览一样 */ int returnValue = 0; SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(fileName)); OutputFormat format1 = OutputFormat.createPrettyPrint(); format1.setEncoding("gbk"); try { XMLWriter writer = new XMLWriter( new FileWriter(new File(fileName)), format1); writer.write(document); writer.close(); returnValue = 1; } catch (UnsupportedEncodingException e) { throw e; } return returnValue; } // 创建xml文件 public int createXMLFile(String fileName) throws Exception { int returnValue = 0; Document document = DocumentHelper.createDocument(); Element booksElement = document.addElement("books"); booksElement.addComment("This is a test for dom4jdemo"); Element book1 = booksElement.addElement("book"); book1.addAttribute("show", "yes"); Element title1 = book1.addElement("title"); title1.addText("zhangsan title"); Element book2 = booksElement.addElement("book"); book2.addAttribute("show", "yes"); Element title2 = book2.addElement("title"); title2.addText("lisi title"); Element book3 = booksElement.addElement("book"); book3.addAttribute("show", "yes"); Element title3 = book3.addElement("title"); title3.addText("wangwu title"); Element owner = booksElement.addElement("owner"); owner.addText("xc"); try { XMLWriter writer = new XMLWriter(new FileWriter(new File(fileName))); writer.write(document); writer.close(); returnValue = 1; } catch (Exception e) { throw e; } return returnValue; } public static void main(String[] args) { Dom4jDemo dom = new Dom4jDemo(); try { // dom.createXMLFile("dom4j.xml"); // dom.modifyXMLFile("dom4j.xml","dom4jnew.xml"); // dom.formatXML("dom4jnew.xml"); } catch (Exception e) { e.printStackTrace(); } }