XML解析——Dom4j
来源:互联网 发布:有那些发表文章的软件 编辑:程序博客网 时间:2024/06/06 02:44
1、Dom4j(Document Object Model for Java)
列表内容
Dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术。
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。
【优点】
①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
【缺点】
①大量使用了接口,API较为复杂。
2、解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式:
①自己创建Document对象
Document doc=DocumentHelper.createDocument();
Element root=doc.addElement(“students”); //students是根节点
②读取XML文件获取Document对象
SAXReader reader=new SAXReader();
Document doc=reader.read(new File(“XML文件地址”));
③读取XML文本获取Document对象
String xml=”……“;
Document doc=reader.parseText(xml);
3、解析XML,取 2 中的一种方法先获取Document对象:
SAXReader reader=new SAXReader();
Document doc=reader.read(new File(“XML文件地址”));
Element root=doc.getRootElement();
一、开始遍历根节点下面的所有节点。listNodes(root);
public void listNodes(Element node){ System.out.println("当前节点的名称:" + node.getName()); //首先获取当前节点的所有属性节点 List<Attribute> list = node.attributes(); //遍历属性节点 ,输出属性 for(Attribute attribute : list){ System.out.println("属性"+attribute.getName() +":" + attribute.getValue()); } //如果当前节点内容不为空,则输出 if(!(node.getTextTrim().equals(""))){ System.out.println( node.getName() + ":" + node.getText()); } //同时迭代当前节点下面的所有子节点,获得Iterator对象 //使用递归 Iterator<Element> iterator = node.elementIterator(); while(iterator.hasNext()){ Element e = iterator.next(); listNodes(e); } }
二、Dom4j操作节点属性
使用dom4j可以操作节点属性,比如添加节点属性、删除节点属性、修改属性值等操作。下面使用dom4j为上述的student1节点删除id属性,新添name属性。
public void test2()throws Exception{ //创建SAXReader对象 SAXReader reader = new SAXReader(); //读取文件 转换成Document Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml")); //获取根节点元素对象 Element root = document.getRootElement(); System.out.println("-------添加属性前------"); //获取节点 第一个 student节点 Element student1Element = root.element("student"); //遍历 listNodes(student1Element); //获取其属性 //root.element("student").elementText("id"); 也可以获得id值 Attribute idAttribute = student1Element.attribute("id"); //删除其属性 student1Element.remove(idAttribute); //为其添加新属性 student1Element.addAttribute("name", "这是student1节点的新属性"); System.out.println("-------添加属性后------"); listNodes(student1Element); }
三、Dom4j新增节点,使用Dom4j可以删除指定节点、新增节点等操作。
public void test3()throws Exception{ //创建SAXReader对象 SAXReader reader = new SAXReader(); //读取文件 转换成Document Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml")); //获取根节点元素对象 Element root = document.getRootElement(); System.out.println("-------添加节点前------"); //获取第一个 student 节点 Element student1Element = root.element("student"); //添加phone节点 ,在student1Element父节点 下面增加 Element phoneElement = student1Element.addElement("phone"); //为phone节点设置值 phoneElement.setText("137xxxxxxxx"); //把student1Element写入新文件,或是覆盖之前的文件(现在的改变只是内存上的) writerDocumentToNewFile(document);
同样,删除节点先获得父节点,在通过父节点删除
public static void remove(Document doc,String address) throws Exception{ //得到想要删除的节点 Element remove = doc.getRootElement().element("student"); //删除节点时先得到父亲节点,再删除 remove.getParent().remove(remove); //写入硬盘。 writeToFile(doc,address); }
四、从内存写入硬盘上。
public static void writerDocumentToNewFile(document) throws Exception { //良好的输出格式 OutputFormat format = OutputFormat.createPrettyPrint(); //紧凑的输出格式,内容挤在一行 //format = OutputFormat.createCompactFormat(); //写出到address(XML文件的地址),设置输出文件格式 和字符编码"UTF-8" XMLWriter writer = new XMLWriter( new OutputStreamWriter(new FileOutputStream(new File(address)),"UTF-8"),format); writer.write(document); writer.close(); }
- XML解析——Dom4j
- XML解析——Dom4j
- XML解析——DOM4J
- XML——XML解析之DOM4J
- Java解析xml——Dom4J解析
- java解析XML——dom4j解析
- XML解析器——DOM4j
- 慕课网——DOM4J解析XML
- Java——DOM4J解析XML文件
- 详解XML解析(二)—DOM4J
- XML解析之——使用dom4j解析XML
- xml解析系列(一)——用dom4j解析xml
- xml学习笔记—简单使用DOM4J解析xml
- xml常用的解析——Dom4J解析
- Xml—dom4j解析—学生信息管理系统
- xml的解析方式——dom/sax、jdom、dom4j
- Java学习之路——用dom4j解析xml
- Java学习之路——用dom4j解析xml
- 23.2.0 bug集合
- 为何Eclipse的调试快捷键F8失效?
- android 加载gif
- android 自动登录
- 探讨Android开发值得注意的规范
- XML解析——Dom4j
- ondraw() 和dispatchdraw()的区别
- HDU 5831 Rikka with Parenthesis II(机智)
- 使用纯前端JavaScript 实现Excel IO
- 浅谈JSON和JSONP
- 使用二进制进行BFS Flip Game
- UITableView实现多选行
- MySQL会话变量 和 系统变量
- java定时器Timer的使用