1.Document对象相关 SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml")); 2.节点相关 (1) 获取文档根节点 Element rootElm = document.getRootElement(); (2) 获取某节点的单个子节点 Element memberElm = root.element("member");//member是节点名 (3) 取得节点的文字 String text = memberElm.getText(); (4) 取得某节点下名为"member"的所有子节点并进行遍历. List nodes = rootElm.elements("member");//获取到名称为member的节点集合,member的子节点需要用elements函数获取 for(Iterator it = nodes.iterator(); it.hasNext();){ Element elm = (Element)it.next(); //... } (5) 对某节点下的所有子节点进行遍历 for(Iterator it = root.elementIterator();it.hasNext()){ Element element = (Element)it.next(); //... } (6) 在某节点下添加子节点 Element ageElm = newMemberElm.addElement("age"); (7) 设置节点文字 ageElm.setText("29"); (8)删除某节点 parentElm.remove(childElm);//childElm是待删除的节点 (9)添加一个CDATA节点 Element contentElm = infoElm.addElement("content"); contentElm.addCDATA(diary.getContent()); contentElm.getText(); //获取节点的CDATA值与获取节点的值是同一个 contentElm.clearContent(); //清除节点的内容,CDATA亦可。 3. 属性相关 (1) 取得某节点下的某属性 Element root = document.getRootElement(); Atrribute attribute = root.attribute("size");//属性名为size (2) 取得属性的文字 String text = attribute.getText(); (3) 遍历某节点的所有属性 Element root = document.getRootElement(); for(Iterator it = root.attributeIterator(); it.hasNext();){ Attribute attribute = (Attribute)it.next(); String text = attribute.getText(); System.out.println(text); } (4) 设置某节点的属性和文字 newMemberEml.addAtrribute("name","sitinspring"); (5) 设置属性的文字 Attribute attribute = root.attribute("name"); attribute.setText("sitinspring"); 4.采用XPATH获取节点元素 由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB 第二种形式 //BBB: 表示和这个名称相同,表示只要名称是BBB,都得到 第三种形式 "/*": 所有元素 第四种形式 BBB[1]: 表示第一个BBB元素 BBB[last()]:表示最后一个BBB元素 第五种形式 //BBB[@id]: 表示只要BBB元素上面有id属性,都得到 第六种形式 //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1 使用dom4j支持xpath具体操作 默认的情况下,dom4j不支持xpath,如果想要在dom4j里面是有xpath,第一步需要,引入支持xpath的jar包,如下: 在dom4j里面提供了两个方法,用来支持xpath selectNodes("xpath表达式"),获取多个节点 selectSingleNode("xpath表达式"),获取一个节点 注意XPATH获取的是NODE,NODE与ELEMENT之间可以相互转换. 示例1 XML内容 <?xml version="1.0" encoding="gb2312"?> <students> <student age="25"><!--如果没有age属性,默认的为20--> <name>崔卫兵</name> <college>PC学院</college> <telephone>62354666</telephone> <notes>男,1982年生,硕士,现就读于北京邮电大学</notes> </student> <student> <name>张洪泽</name> <college leader="leader">PC学院</college><!--如果没有leader属性,默认的为leader--> <telephone>62358888</telephone> <notes>男,1987年生,硕士,现就读于中国农业大学</notes> </student> </students> 读取程序 Dom4jReadExmple public class Dom4jReadExmple { /** * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中 * * @param filename * String 待遍历的XML文件(相对路径或者绝对路径) * @param hm * HashMap 存放遍历结果 */ public void iterateWholeXML(String filename, List<HashMap<String, String>> hm) { SAXReader saxReader = new SAXReader(); try { File f = new File(filename); Document document = saxReader.read(f); Element root = document.getRootElement(); // 遍历根结点(students)的所有孩子节点(肯定是student节点) for (Iterator iter = root.elementIterator(); iter.hasNext();) { HashMap<String,String> stuHM = new HashMap<String,String>(); Element element = (Element) iter.next(); // 获取student节点的age属性的值 Attribute ageAttr = element.attribute("age"); if (ageAttr != null) { String age = ageAttr.getValue(); if (age != null && !age.equals("")) { stuHM.put(element.getName() + "-" + ageAttr.getName(), age); } else { stuHM.put(element.getName() + "-" + ageAttr.getName(), "20"); } } else { stuHM.put(element.getName() + "-age", "20"); } // 遍历student结点的所有孩子节点(即name,college,telphone,notes),并处理 for (Iterator iterInner = element.elementIterator(); iterInner.hasNext();) { Element elementInner = (Element) iterInner.next(); if (elementInner.getName().equals("college")) { stuHM.put(elementInner.getName(), elementInner.getText()); // 获取college节点的leader属性的值 Attribute leaderAttr = elementInner.attribute("leader"); if (leaderAttr != null) { String leader = leaderAttr.getValue(); if (leader != null && !leader.equals("")) { stuHM.put(elementInner.getName() + "-" + leaderAttr.getName(), leader); } else { stuHM.put(elementInner.getName() + "-" + leaderAttr.getName(), "leader"); } } else { stuHM.put(elementInner.getName() + "-leader", "leader"); } } else { stuHM.put(elementInner.getName(), elementInner.getText()); } } hm.add(stuHM); } } catch (DocumentException e) { e.printStackTrace(); } } } //读取代码 TestDom4jReadExmple public class TestDom4jReadExmple { public static void main(String[] args) { try{ //获取解析完后的解析信息 List<HashMap<String,String>> hashMap; Dom4jReadExmple drb=new Dom4jReadExmple(); //遍历整个XML文件 hashMap = new ArrayList<HashMap<String,String>>(); String n = System.getProperty("user.dir");//获取当前工程真实路径 //studentInfo.xml保存学生信息,放在src目录下 drb.iterateWholeXML(n+"\\src\\studentInfo.xml", hashMap); for(HashMap stuHM:hashMap){ System.out.print(stuHM.get("name")+"\t"); System.out.print(stuHM.get("student-age")+"\t"); System.out.print(stuHM.get("college")+"\t"); System.out.print(stuHM.get("college-leader")+"\t"); System.out.print(stuHM.get("telephone")+"\t"); System.out.println(stuHM.get("notes")+"\t"); } }catch(Exception ex){ ex.printStackTrace(); } } } 示例2 采用XPATH读取 <?xml version="1.0" encoding="UTF-8"?> <class> <student> <name>张三</name> <sid>111111</sid> </student> <student id="stu1"> <name>李四</name> <sid>222222</sid> </student> </class> import java.util.List; import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.SAXReader; public class Dom4jXpath { public static void main(String[] args) throws Exception { select();//查询所有name的值 //select2();//查询id=stu1的学生的name的值 } //查询所有name的值 private static void select() throws Exception { SAXReader saxReader=new SAXReader(); Document document=saxReader.read("src/1.xml"); List<Node>list=document.selectNodes("//name"); for(int i=0;i<list.size();i++) System.out.println(list.get(i).getText()); } //查询id=stu1的学生的name的值 private static void select2() throws Exception { SAXReader saxReader=new SAXReader(); Document document=saxReader.read("src/1.xml"); Node node=document.selectSingleNode("//student[@id='stu1']/name"); System.out.println(node.getText()); } }
相关推荐
NULL 博文链接:https://sxpujs.iteye.com/blog/375485
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
dom4j是非常优秀的xml解析包,操作起来读写xml非常方便。把自己写的一个读写dom4j.xml实例共享给大家
dom4j读写xmldom4j读写xmldom4j读写xmldom4j读写xmldom4j读写xml
详细介绍了使用Dom4j进行xml文件的读取方法
java中dom4j读写XML(项目中含所需要的jar包)
使用dom4j读写XML文档 1.获取文档的根节点. Element rootElm = document.getRootElement(); 2.取得某节点的单个子节点. Element memberElm=root.element("member");// "member"是节点名 3.取得节点的文字 String ...
总结DOM、SAX、JDOM、DOM4J读写xml文档的多种方法。
Dom4j 读写 XML
Dom4j解析教程。详细讲解如何使用dom4j解析xml,简单易懂。
简单的读取xml,利用dom4j读写xml实例xmldemo
使用dom4j对xml文档进行增删改. 查询就不用说了,使用elements(....)/element(...)/attributeValue()/getText()等方法
利用dom4j--读取xml文件。 代码简洁易懂。
使用dom4j读取xml四种方法,希望对各位朋友有所帮助
本文件主要介绍我们怎么从dom4j中读取xml文件中的信息
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...
通过Dom4j创建和读取xml文件下载