使用Dom4j解析XML

转载自   使用Dom4j解析XML

  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下载其最新版.

         对于下载的zip文件进行解压后的效果如下:

        

 打开dom4j-1.6.1的解压文件


在这里可以看到有docs帮助的文件夹,也有需要使用dom4j解析xml文件的dom4j-1.6.1.jar文件.我们只需要把dom4j-1.6.1.jar文件构建到我们开发的项目中就可以使用dom4j开发了.

下面我以Myeclipse创建Java项目的构建方法为例说明.

首先创建一个demo项目,在demo项目中创建一个lib文件,把dom4j-1.6.1.jar文件拷贝到lib中,然后右键dom4j-1.6.1jar文件

   

点击Add to Build Path即可构建到项目中去了.

备注:如果进行的是web项目开发,我们只需要把它拷贝到web-inf/lib中去即可,会自动构建到web项目中.


在项目开发的过程中可以参考docs文件夹的(帮助文档),找到index.html打开,点击Quick start可以通过帮助文档进行学习 dom4j进行xml的解析.


    下面我对我认为api中重要的方法进行翻译说明如下:

一、DOM4j中,获得Document对象的方式有三种:

1.读取XML文件,获得document对象              
                  SAXReader reader = new SAXReader();                
       Document   document = reader.read(new File("csdn.xml"));  
2.解析XML形式的文本,得到document对象.  
                  String text = "<csdn></csdn>";              
                  Document document = DocumentHelper.parseText(text);  
3.主动创建document对象.  
                 Document document = DocumentHelper.createDocument();             //创建根节点  
                 Element root = document.addElement("csdn");  

二、节点对象操作的方法

1.获取文档的根节点.  
      Element root = document.getRootElement();  
    2.取得某个节点的子节点.  
      Element element=node.element(“四大名著");  
    3.取得节点的文字  
        String text=node.getText();  
    4.取得某节点下所有名为“csdn”的子节点,并进行遍历.  
       List nodes = rootElm.elements("csdn");   
         for (Iterator it = nodes.iterator(); it.hasNext();) {     
      Element elm = (Element) it.next();    
    // do something  
 }  
     5.对某节点下的所有子节点进行遍历.      
      for(Iterator it=root.elementIterator();it.hasNext();){        
        Element element = (Element) it.next();        
       // do something   
 }  
    6.在某节点下添加子节点  
      Element elm = newElm.addElement("朝代");  
    7.设置节点文字.  elm.setText("明朝");  
    8.删除某节点.//childElement是待删除的节点,parentElement是其父节点  parentElement.remove(childElment);  
    9.添加一个CDATA节点.Element contentElm = infoElm.addElement("content");contentElm.addCDATA(“cdata区域”);  


三、节点对象的属性方法操作

1.取得某节点下的某属性    Element root=document.getRootElement();        //属性名name  
         Attribute attribute=root.attribute("id");  
2.取得属性的文字  
    String text=attribute.getText();  
3.删除某属性 Attribute attribute=root.attribute("size"); root.remove(attribute);  
4.遍历某节点的所有属性     
      Element root=document.getRootElement();        
       for(Iterator it=root.attributeIterator();it.hasNext();){          
           Attribute attribute = (Attribute) it.next();           
           String text=attribute.getText();          
           System.out.println(text);    
  }  
5.设置某节点的属性和文字.   newMemberElm.addAttribute("name", "sitinspring");  

6.设置属性的文字   Attribute attribute=root.attribute("name");   attribute.setText("csdn"); 


四、将文档写入XML文件

1.文档中全为英文,不设置编码,直接写入的形式.    
       XMLWriter writer = new XMLWriter(new  FileWriter("ot.xml"));   
       writer.write(document);    
       writer.close();  
2.文档中含有中文,设置编码格式写入的形式.  
       OutputFormat format = OutputFormat.createPrettyPrint();// 创建文件输出的时候,自动缩进的格式                    
       format.setEncoding("UTF-8");//设置编码  
       XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);  
       writer.write(document);  

       writer.close();  


五、字符串与XML的转换

1.将字符串转化为XML  
      String text = "<csdn> <java>Java班</java></csdn>";  
      Document document = DocumentHelper.parseText(text);  
2.将文档或节点的XML转化为字符串.  
       SAXReader reader = new SAXReader();  
       Document   document = reader.read(new File("csdn.xml"));              
       Element root=document.getRootElement();      
       String docXmlText=document.asXML();  
       String rootXmlText=root.asXML();  
       Element memberElm=root.element("csdn");  
       String memberXmlText=memberElm.asXML(); 


六、案例(解析sida.xml文件并对其进行curd的操作)

1.sida.xml描述四大名著的操作,文件内容如下

<?xml version="1.0" encoding="UTF-8"?>  
<四大名著>  <西游记 id="x001">  <作者>吴承恩1</作者>  <作者>吴承恩2</作者>  <朝代>明朝</朝代>  </西游记>  <红楼梦 id="x002">  <作者>曹雪芹</作者>  </红楼梦>  
</四大名著>  

2.解析类测试操作

package dom4j;  import java.io.File;  
import java.io.FileOutputStream;  
import java.io.FileWriter;  
import java.io.OutputStreamWriter;  
import java.nio.charset.Charset;  
import java.nio.charset.CharsetEncoder;  
import java.util.Iterator;  
import java.util.List;  import org.dom4j.Attribute;  
import org.dom4j.Document;  
import org.dom4j.Element;  
import org.dom4j.io.OutputFormat;  
import org.dom4j.io.SAXReader;  
import org.dom4j.io.XMLWriter;  
import org.junit.Test;  public class Demo01 {  @Test  public void test() throws Exception {  // 创建saxReader对象  SAXReader reader = new SAXReader();  // 通过read方法读取一个文件 转换成Document对象  Document document = reader.read(new File("src/dom4j/sida.xml"));  //获取根节点元素对象  Element node = document.getRootElement();  //遍历所有的元素节点  listNodes(node);  // 获取四大名著元素节点中,子节点名称为红楼梦元素节点。  Element element = node.element("红楼梦");  //获取element的id属性节点对象  Attribute attr = element.attribute("id");  //删除属性  element.remove(attr);  //添加新的属性  element.addAttribute("name", "作者");  // 在红楼梦元素节点中添加朝代元素的节点  Element newElement = element.addElement("朝代");  newElement.setText("清朝");  //获取element中的作者元素节点对象  Element author = element.element("作者");  //删除元素节点  boolean flag = element.remove(author);  //返回true代码删除成功,否则失败  System.out.println(flag);  //添加CDATA区域  element.addCDATA("红楼梦,是一部爱情小说.");  // 写入到一个新的文件中  writer(document);  }  /** * 把document对象写入新的文件 *  * @param document * @throws Exception */  public void writer(Document document) throws Exception {  // 紧凑的格式  // OutputFormat format = OutputFormat.createCompactFormat();  // 排版缩进的格式  OutputFormat format = OutputFormat.createPrettyPrint();  // 设置编码  format.setEncoding("UTF-8");  // 创建XMLWriter对象,指定了写出文件及编码格式  // XMLWriter writer = new XMLWriter(new FileWriter(new  // File("src//a.xml")),format);  XMLWriter writer = new XMLWriter(new OutputStreamWriter(  new FileOutputStream(new File("src//a.xml")), "UTF-8"), format);  // 写入  writer.write(document);  // 立即写入  writer.flush();  // 关闭操作  writer.close();  }  /** * 遍历当前节点元素下面的所有(元素的)子节点 *  * @param node */  public void listNodes(Element node) {  System.out.println("当前节点的名称::" + node.getName());  // 获取当前节点的所有属性节点  List<Attribute> list = node.attributes();  // 遍历属性节点  for (Attribute attr : list) {  System.out.println(attr.getText() + "-----" + attr.getName()  + "---" + attr.getValue());  }  if (!(node.getTextTrim().equals(""))) {  System.out.println("文本内容::::" + node.getText());  }  // 当前节点下面子节点迭代器  Iterator<Element> it = node.elementIterator();  // 遍历  while (it.hasNext()) {  // 获取某个子节点对象  Element e = it.next();  // 对子节点进行遍历  listNodes(e);  }  }  /** * 介绍Element中的element方法和elements方法的使用 *  * @param node */  public void elementMethod(Element node) {  // 获取node节点中,子节点的元素名称为西游记的元素节点。  Element e = node.element("西游记");  // 获取西游记元素节点中,子节点为作者的元素节点(可以看到只能获取第一个作者元素节点)  Element author = e.element("作者");  System.out.println(e.getName() + "----" + author.getText());  // 获取西游记这个元素节点 中,所有子节点名称为作者元素的节点 。  List<Element> authors = e.elements("作者");  for (Element aut : authors) {  System.out.println(aut.getText());  }  // 获取西游记这个元素节点 所有元素的子节点。  List<Element> elements = e.elements();  for (Element el : elements) {  System.out.println(el.getText());  }  }  }  
自己适当注释部分代码观察运行效果,反复练习,希望你对dom4j有进一步的了解.


七、字符串与XML互转换案例

package dom4j;  import java.io.File;  
import java.io.FileOutputStream;  
import java.io.OutputStreamWriter;  import org.dom4j.Document;  
import org.dom4j.DocumentHelper;  
import org.dom4j.Element;  
import org.dom4j.io.OutputFormat;  
import org.dom4j.io.SAXReader;  
import org.dom4j.io.XMLWriter;  
import org.junit.Test;  public class Demo02 {  @Test  public void test() throws Exception {  // 创建saxreader对象  SAXReader reader = new SAXReader();  // 读取一个文件,把这个文件转换成Document对象  Document document = reader.read(new File("src//c.xml"));  // 获取根元素  Element root = document.getRootElement();  // 把文档转换字符串  String docXmlText = document.asXML();  System.out.println(docXmlText);  System.out.println("---------------------------");  // csdn元素标签根转换的内容  String rootXmlText = root.asXML();  System.out.println(rootXmlText);  System.out.println("---------------------------");  // 获取java元素标签 内的内容  Element e = root.element("java");  System.out.println(e.asXML());  }  /** * 创建一个document对象 往document对象中添加节点元素 转存为xml文件 *  * @throws Exception */  public void test2() throws Exception {  Document document = DocumentHelper.createDocument();// 创建根节点  Element root = document.addElement("csdn");  Element java = root.addElement("java");  java.setText("java班");  Element ios = root.addElement("ios");  ios.setText("ios班");  writer(document);  }  /** * 把一个文本字符串转换Document对象 *  * @throws Exception */  public void test1() throws Exception {  String text = "<csdn><java>Java班</java><net>Net班</net></csdn>";  Document document = DocumentHelper.parseText(text);  Element e = document.getRootElement();  System.out.println(e.getName());  writer(document);  }  /** * 把document对象写入新的文件 *  * @param document * @throws Exception */  public void writer(Document document) throws Exception {  // 紧凑的格式  // OutputFormat format = OutputFormat.createCompactFormat();  // 排版缩进的格式  OutputFormat format = OutputFormat.createPrettyPrint();  // 设置编码  format.setEncoding("UTF-8");  // 创建XMLWriter对象,指定了写出文件及编码格式  // XMLWriter writer = new XMLWriter(new FileWriter(new  // File("src//a.xml")),format);  XMLWriter writer = new XMLWriter(new OutputStreamWriter(  new FileOutputStream(new File("src//c.xml")), "UTF-8"), format);  // 写入  writer.write(document);  // 立即写入  writer.flush();  // 关闭操作  writer.close();  }  
}  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core扩展IServiceCollection自动注册服务

前言 在ASP.NET Core中使用依赖注入中使用很简单&#xff0c;只需在Startup类的ConfigureServices()方法中&#xff0c;通过IServiceCollection接口进行注入即可&#xff0c;其它的无需关心。 通过接口的Add*方法进行注册&#xff0c;代码如下&#xff1a; 1 public void Confi…

微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...

1、微型计算机的显示器显示西文字符时&#xff0c;一般情况下一屏最多可显示( A )A、25行&#xff0c;每行80个字符 B、25行&#xff0c;每行60个字符C、20行&#xff0c;每行80个字符 D、20行&#xff0c;每行60个字符2、计算机中&#xff0c;一个浮点数由两部分组成&#xff…

dom4j读取XML文件内容

转载自 dom4j读取XML文件内容<?xml version"1.0" encoding"UTF-8"?> <RESULT> <VALUE><NO>A1234</NO><ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE><NO>B1234</NO><…

我为什么用docker-compose来打包开发环境

BUILD, SHIP, RUNDocker is the world’s leading software containerization platform Docker的出现&#xff0c;让虚拟技术更上一个台阶。更有Docker Hub作为docker images的市场载体&#xff0c;让全世界分享你的成果。 建议使用Docker for Mac(10.10.3) 或 Docker for Wind…

微型计算机使用键盘上的alt键称为,微型计算机使用的键盘上的Alt键称为_____。...

摘要&#xff1a;须牢盒安光缆固、微型装必整齐接头&#xff0c;信线规定《通路工程验范》收规&#xff0c;作伸必须两侧缩(。在交)米越时为(&#xff0c;微型信光)规途通缆线路工定《长程验范》收规。小净火栓光缆米架空距消距为的最&#xff0c;计算机使键盘t键信光)规途通缆…

java使用htmlparser提取网页纯文本例子

转载自 java使用htmlparser提取网页纯文本例子这篇文章主要介绍了java使用htmlparser提取网页纯文本例子,需要的朋友可以参考下package com.test; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filt…

java实现打印等腰三角形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印等腰三角形*/ public class IsoTriangle {public static void main(String[] args) {int rows 0; //三角形行数System.out.print("请输入等腰三角形的行数&#xff1a;");Scanner input …

在.NET Core中使用MySQL5.7的JSON类型字段

Getting Started ① Adding pomelo myget feed into your NuGet.config which located in your solution root. <?xml version"1.0" encoding"utf-8"?><configuration><packageSources><add key"nuget.org" value"h…

中南大学计算机网.doc,中南大学计算机网络实验报告.doc

计算机网络实验报告0909122820周建权第第 PAGE \* MERGEFORMAT 1 页 共 NUMPAGES \* MERGEFORMAT 11 页计算机网络实验报告专业班级&#xff1a;信安1202班指导老师&#xff1a;王伟平姓 名&#xff1a;周建权学 号&#xff1a;0909122820实验二 网络路由层协议模拟实验网络路由…

Java实现HTML代码生成PDF文档

转载自 Java实现HTML代码生成PDF文档1、IText实现html2pdf&#xff0c;速度快&#xff0c;纠错能力差&#xff0c;支持中文&#xff08;要求HTML使用unicode编码&#xff09;&#xff0c;但中支持一种中文字体&#xff0c;开源。 2、Flying Sauser实现html2pdf&#xff0c;纠…

java实现九九乘法表的输出

package cn.jbit.nestedloops; /*** 打印九九乘法表*/ public class MulTable {public static void main(String[] args) {int rows 9; //乘法表的行数for(int i 1; i<rows; i){ //一共9行for(int j 1; j < i; j){ //第i行有i个式子System.out.print(j"*&q…

成人教育计算机统考分数查询江苏省,江苏省教育考试院查询

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供读者参考&…

分布式系统事务一致性解决方案大对比,谁最好使?

“ 在分布式系统中&#xff0c;同时满足“一致性”、“可用性”和“分区容错性”三者是不可能的。分布式系统的事务一致性是一个技术难题&#xff0c;各种解决方案孰优孰劣&#xff1f; 老司机介绍 丁浪&#xff0c;现就职于某垂直电商平台&#xff0c;担任技术架构师。关注高并…

使用Java将HTML转成Word格式文件

转载自 使用Java将HTML转成Word格式文件 import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException;import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi.poifs.filesystem.Docum…

java百钱白鸡的算法

package cn.jbit.nestedloops;public class Chook {/*** 百钱买百鸡*/public static void main(String[] args) {int way 1; //买法int k 0; //雏鸡数for(int i1;i<20;i){ //公鸡数for(int j1;j<33;j){ //母鸡数k 100-i-j; //一共100只鸡if(k%3 0 && (5*i3…

.NET Core 工具遥测(应用信息收集)

说明&#xff1a;本文是个人翻译文章&#xff0c;由于个人水平有限&#xff0c;有不对的地方请大家帮忙更正。原文&#xff1a;.NET Core Tools Telemetry翻译&#xff1a;.NET Core 工具遥测&#xff08;应用信息收集&#xff09; .NET Core 工具遥测&#xff08;应用信息收集…

Jsoup学习总结

转载自 Jsoup学习总结摘要 Jsoup是一款比较好的Java版HTML解析器。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 jSOUP主要功能 从一个URL&#xff0c;文件或字符串中…

计算机发展阶段的划分是以什么作为标志,计算机以什么划分发展阶段

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。计算机是以电子元件来划分发展阶段的&#xff0c;即四个发展阶段&#xff0c;这就是人们通常所说的电子管、晶体管、集成电路、超大规模集成电路等四代。集成电路(integrated circui…

docker4dotnet #3 .net猿和小鲸鱼的苹果山之旅

.net猿遇到了小鲸鱼&#xff0c;觉得越来越兴奋。本来.net猿只是在透过家里那田子窗看外面的世界&#xff0c;但是看着海峡对岸的苹果园越来越茂盛&#xff0c;实在不想再去做一只宅猿了。于是&#xff0c;.net猿决定搭上小鲸鱼的渡轮到苹果园去看看。 .net猿上了小鲸鱼渡轮就先…

jsoup解析HTML用法小结

转载自 jsoup解析HTML用法小结使用HttpClientjsoup做采集器有一段时间了&#xff0c;发现jsoup很好用&#xff0c;而且还有很多方便的东西都没怎么用上。于是想根据官网上的cookbook来对jsoup的使用做个小结&#xff0c;或者是归纳。按功能分类做个列表&#xff0c;方便在写程…