java解析XML——dom4j解析
2017-09-03 09:36
337 查看
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,
具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. 对主流的java XML
API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来
越多的Java软件都在使用dom4j来读写XML,例如hibernate,包括sun公司自己的JAXM也用了Dom4j。
使用Dom4j开发,需下载dom4j相应的jar文件 1.官网下载: http://www.dom4j.org/dom4j-1.6.1/
2.dom4j是sourceforge.NET上的一个开源项目,因此可以到http://sourceforge.net/projects/dom4j
或者https://dom4j.github.io/下载其最新版.同时,后者也是相应的教程。
然后打开dom4j-1.6.1的解压文件,在这里可以看到有docs帮助的文件夹,也有需要使用dom4j解析xml
文件的dom4j-1.6.1.jar文件.我们只需要把dom4j-1.6.1.jar文件构建到我们开发的项目中就可以使用dom4j开发了.
1、环境准备:下载dom4j-1.6.1.jar
2. 基本介绍:解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式:
(1)自己创建Document对象
Document document = DocumentHelper.createDocument();
Element root = document.addElement("students");
其中students是根节点,可以继续添加其他节点等操作。
(2)读取XML文件获取Document对象
//创建SAXReader对象
SAXReader reader = new SAXReader();
//读取文件 转换成Document
Document document = reader.read(new File("XXXX.xml"));
(3)读取XML文本内容获取Document对象
String xmlStr = "<students>......</students>";
Document document = DocumentHelper.parseText(xmlStr);
3. 具体示例:
(1)xml文件内容:在工程跟目录下建立xml/data1.xml文件,内容如下:
(2)解析文件并且遍历打印:
(3)添加/删除节点
(4)添加/删除节点中的某个属性值
(5) 更新节点的值或属性值
(6)将XML内容写入到文件
demo传送门:
https://github.com/215836017/ParseXML_java
https://github.com/215836017/ParserXML_android
注:上面Java的demo中用到的xml文件是当前目录下的xml/data1.xml文件。result.xml是生成的文件。data2.xml, data3.xml是用来比较解析时间的。
Android的demo中用到xml文件是存放在手机根目录下的data1.xml文件。
具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它. 对主流的java XML
API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来
越多的Java软件都在使用dom4j来读写XML,例如hibernate,包括sun公司自己的JAXM也用了Dom4j。
使用Dom4j开发,需下载dom4j相应的jar文件 1.官网下载: http://www.dom4j.org/dom4j-1.6.1/
2.dom4j是sourceforge.NET上的一个开源项目,因此可以到http://sourceforge.net/projects/dom4j
或者https://dom4j.github.io/下载其最新版.同时,后者也是相应的教程。
然后打开dom4j-1.6.1的解压文件,在这里可以看到有docs帮助的文件夹,也有需要使用dom4j解析xml
文件的dom4j-1.6.1.jar文件.我们只需要把dom4j-1.6.1.jar文件构建到我们开发的项目中就可以使用dom4j开发了.
1、环境准备:下载dom4j-1.6.1.jar
2. 基本介绍:解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式:
(1)自己创建Document对象
Document document = DocumentHelper.createDocument();
Element root = document.addElement("students");
其中students是根节点,可以继续添加其他节点等操作。
(2)读取XML文件获取Document对象
//创建SAXReader对象
SAXReader reader = new SAXReader();
//读取文件 转换成Document
Document document = reader.read(new File("XXXX.xml"));
(3)读取XML文本内容获取Document对象
String xmlStr = "<students>......</students>";
Document document = DocumentHelper.parseText(xmlStr);
3. 具体示例:
(1)xml文件内容:在工程跟目录下建立xml/data1.xml文件,内容如下:
<students> <student> <name sex="man">小明</name> <nickName>明明</nickName> <age>20</age> <address>北京</address> </student> <student> <name sex="woman">小红</name> <nickName>红红</nickName> <age>20</age> <address>上海</address> </student> <student> <name sex="man">小亮</name> <nickName>亮亮</nickName> <age>30</age> <address>广州</address> </student> <student-0> <name sex="man">小亮-0</name> <nickName>亮亮-0</nickName> <age>200</age> <address>广州-0</address> </student-0> </students>
(2)解析文件并且遍历打印:
private void parseXml(int flag) { long startTime = System.currentTimeMillis(); System.out.println("Dom4j开始解析: " + startTime); Bean1 bean = null; try { // 创建SAXReader对象 SAXReader reader = new SAXReader(); // 读取文件 转换成Document Document document = reader.read(xmlFile); // 获取根节点元素对象 Element rootElement = document.getRootElement(); // 第一种方法遍历 // listNodes(rootElement); // 第二种方法遍历 List<Element> elements = rootElement.elements(); for (Element child : elements) { // 未知属性名情况下 /* * List<Attribute> attributeList = child.attributes(); for * (Attribute attr : attributeList) { * System.out.println(attr.getName() + ": " + attr.getValue()); * } */ // 已知属性名情况下 Element child2 = child.element("name"); Attribute attribute = child2.attribute("sex"); System.out.println("sex: " + attribute.getText()); // 未知子元素名情况下 /* * List<Element> elementList = child.elements(); for (Element * ele : elementList) { System.out.println(ele.getName() + ": " * + ele.getText()); } System.out.println(); */ // 已知子元素名的情况下 System.out.println("name: " + child.elementText("name")); System.out.println("age: " + child.elementText("age")); System.out.println("address: " + child.elementText("address")); System.out.println("nickName: " + child.elementText("nickName")); // 这行是为了格式化美观而存在 System.out.println(); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } long finishTime = System.currentTimeMillis(); long time = finishTime - startTime; System.out.println("结束解析: " + finishTime + "\nDom4j解析耗时:" + time); for (Bean1 student : datas) { System.out.println(student.toString()); } } /** * 遍历当前节点下的所有节点 * @param node */ 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<Element> iterator = node.elementIterator(); while (iterator.hasNext()) { Element e = iterator.next(); listNodes(e); } }
(3)添加/删除节点
private void addOrRemoveNode() { try { // 增加新的节点 System.out.println("增加/删除节点开始"); SAXReader reader = new SAXReader(); Document document = reader.read(xmlFile); Element root = document.getRootElement(); // 错了,root就是students的节点。 // Element element = root.element("students"); Element studentEl = root.addElement("student001"); Element nameEl = studentEl.addElement("name"); nameEl.addAttribute("sex", "woman"); nameEl.setText("小黄"); Element nickNameEl = studentEl.addElement("nickName"); nickNameEl.setText("阿黄"); Element ageEl = studentEl.addElement("age"); ageEl.setText("28"); Element addEl = studentEl.addElement("address"); addEl.setText("甘肃省兰州市"); // 删除student-0的节点 Element el2remove = root.element("student-0"); Element age2 = el2remove.element("age"); root.remove(el2remove); writeDocmuent2File(document); System.out.println("添加/删除节点完成"); } catch (Exception e) { } }
(4)添加/删除节点中的某个属性值
private void addOrRemoveAttr() { try { SAXReader reader = new SAXReader(); Document document = reader.read(xmlFile); Element root = document.getRootElement(); // 删除属性 Element student0 = root.element("student-0"); Element name0 = student0.element("name"); Attribute sex0 = name0.attribute("sex"); name0.remove(sex0); // 添加属性 Element address0 = student0.element("address"); address0.addAttribute("国家", "中国"); writeDocmuent2File(document); } catch (Exception e) { } }
(5) 更新节点的值或属性值
private void updateValue(){ try{ SAXReader reader = new SAXReader(); Document document = reader.read(xmlFile); Element root = document.getRootElement(); Element student1 = root.element("student-1"); Element name1 = student1.element("name"); Attribute sex1 = name1.attribute("sex"); //下面两句,效果一样。 // sex1.setValue("hahahahah"); sex1.setText("enenenen"); Element address1 = student1.element("address"); address1.setText("芝加哥"); writeDocmuent2File(document); }catch(Exception e ){} }
(6)将XML内容写入到文件
private void writeDocmuent2File(Document docment) throws Exception { // 输出格式 // 紧凑的格式 // OutputFormat format = OutputFormat.createCompactFormat(); // 排版缩进的格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"), format); writer.write(docment); writer.flush(); writer.close(); }
demo传送门:
https://github.com/215836017/ParseXML_java
https://github.com/215836017/ParserXML_android
注:上面Java的demo中用到的xml文件是当前目录下的xml/data1.xml文件。result.xml是生成的文件。data2.xml, data3.xml是用来比较解析时间的。
Android的demo中用到xml文件是存放在手机根目录下的data1.xml文件。
相关文章推荐
- 在java中使用dom4j解析xml(示例代码)
- javaWeb-day02(用 Dom4j 解析 XML)
- java之XML文件的解析方法Dom4j
- JAVA-API Dom4J解析xml/OPML & Rome解析RSS & QRCode编码解码
- java与xml之DOM4J生成和解析XML文档
- java DOM4J 无限连解析XML
- java 使用 dom4j 解析 XML
- java基础-使用dom4j解析XML文件
- JAVA 使用Dom4j 解析XML
- JAVA 使用Dom4j 解析XML
- 在java中使用dom4j解析xml(示例代码)
- dom4j解析一个xml报文,如果是java项目解析没有任何问题,可是放在weblogic下面解析就出现错
- Java解析XML的四种方法--DOM4j
- Java中用dom4j解析XML信息连接Embedded derby数据库
- java dom4j 解析xml字符串的操作实例
- java解析XML (JDOM & DOM4J,X-stream)(二)
- Java自定义生成与解析(Dom4J)XML文件
- java中用Dom4j解析xml
- 在java中使用dom4j解析xml
- java dom4j 解析xml