首先参考dom4j官方文档的描述:
Features
· designed forthe Java platform with full support for the Java Collections Framework(Java 2 Collections)
· full supportfor JAXP, TrAX,SAX,DOM,andXSLT
· fullyintegrated XPath support for easy navigation of XML documents
· event basedproccessing mode to support for massive documents or XML streams
· based on Javainterfaces for flexible plug and play implementations.
· support for XML Schema Data Type support using Kohsuke Kawaguchi'sexcellent Multi Schema Validatorlibrary
本人英语水平不济,在此不做翻译。敬请谅解!大家自己看吧。
这是dom4j开发需要的两个jar包,jaxen-1.1.1.jar.zip是针对xPath解析的,如果不涉及到xPath解析,则dom4j-1.6.1.jar一个包就够用了。
下面针对dom4j的部分重要接口或者类的API进行介绍:
1. Document相关
(1) // 读取xml文件,获得document对象 SAXReader reader = new SAXReader(); Document doc = reader.read(new File(fileName)); (2) //解析XML形式的文本,获得document对象. String xml = "<books></books>"; Document document = DocumentHelper.parseText(xml); (3) //创建document对象 Document document = DocumentHelper.createDocument(); Element rootElement = document.addElement("books");
2. Element相关
(1) //取得根节点 Element rootNode= document.getRootElement(); (2) //取得某个节点的节点名 Element booksElement = rootElement.element("books"); (3) //取得某个节点的值 String text = booksElement.getText(); (4) //取得books节点名为book的的子节点的文字值 String bookElement = rootElement.elementText("book"); (5) //取得books节点下名称为book的子节点并遍历 List elements = rootElement.elements("book"); for(Iterator ite = elements.iterator();ite.hasNext();){ Element ele = (Element)ite.next(); } (6) //遍历某节点下所有子节点 for(Iterator ite = rootNode.elementIterator();ite.hasNext();){ Element element = (Element)ite.next(); } (7) //向某节点添加子节点并赋值 Element titleElement = booksElement.addElement("title"); titleElement.addText("《百年孤独》"); (8) //删除某节点 booksElement.remove(titleElement);
3. Attribute相关
(1) //添加属性并设置属性值 Element bookElement = booksElement.addElement("book"); bookElement.addAttribute("show", "yes"); (2) //设置节点的属性 Attribute attri = booksElement.attribute("date"); attri.setText(“2011-09-09”); (3) //删除属性 boosElement.remove(attri); (4) //遍历属性 Element root=document.getRootElement(); for(Iterator it=root.attributeIterator();it.hasNext();){ Attribute attribute = (Attribute) it.next(); String text=attribute.getText(); }
4. 读写xml文档
(1) //写入xml文档 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(fileName)); xmlWriter.write(doc); xmlWriter.close(); (2) //设置输出格式和编码格式 Document doc = reader.read(fileName); OutputFormat format = OutputFormat.createPrettyPrint(); //OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("GBK"); //XMLWriter writer = new XMLWriter(new FileWriter(newFile),format); XMLWriter writer = new XMLWriter(System.out,format); writer.write(doc); writer.close(); returnValue=1;
5. 字符串与xml转换
(1) //xml转为字符串 SAXReader reader = new SAXReader(); Document document = reader.read(new File("C:/dom4jTest/newTest.xml")); Element root=document.getRootElement(); String docXmlText=document.asXML(); String rootXmlText=root.asXML(); Element memberElm=root.element("book"); String memberXmlText=memberElm.asXML(); (2) //字符串转xml String text = "<User type=\"user\"><name type=\"PinYin\">马克思</name><age>29</age></User>"; Document doc = DocumentHelper.parseText(text);
6. xPath查找节点和属性
(1) //根据xPath查找属性 SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(fileName)); //如果book中的属性show为yes则改为no List list = document.selectNodes("/books/book/@show"); Iterator ite = list.iterator(); while(ite.hasNext()){ Attribute attribute = (Attribute)ite.next(); if(attribute.getValue().equals("yes")){ attribute.setValue("no"); }else{ attribute.setValue("yes"); } } (2) //根据xPath查找节点 //修改owner 并加入时间节点 list = document.selectNodes("/books/owner"); ite = list.iterator(); while(ite.hasNext()){ Element ownerElement = (Element)ite.next(); ownerElement.setText("ChinaRen"); Element dateElement = ownerElement.addElement("date"); dateElement.setText("2011-09-05"); dateElement.addAttribute("type", "Gregorian-calendar"); }