iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 创建与解析XML(五)——详解Dom4j方式
  • 780
分享到

Android 创建与解析XML(五)——详解Dom4j方式

dom4jXML解析xmldomAndroid 2022-06-06 05:06:51 780人浏览 独家记忆
摘要

1、Dom4j概述 dom4j is an easy to use, open source library for working with XML, XPath and X

1、Dom4j概述

dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platfORM using the Java Collections Framework and with full support for DOM, SAX and JAXP.

dom4j官方网址:dom4j 

dom4j源码下载:dom4j download

本示例中,需要导入dom4j.jar包,才能引用dom4j相关类,dom4j源码和jar包,请见本示例【源码下载】或访问 dom4j

org.dom4j包,不仅包含创建xml的构建器类DocumentHelper、Element,而且还包含解析xml的解析器SAXReader、Element,包含类如下:

org.dom4j

org.dom4j.DocumentHelper; org.dom4j.Element; org.dom4j.io.SAXReader; org.dom4j.io.XMLWriter; org.dom4j.DocumentException;

创建和解析xml的效果图:

2、Dom4j 创建 XML

Dom4j,创建xml主要用到了org.dom4j.DocumentHelper、org.dom4j.Document、org.dom4j.io.OutputFormat、org.dom4j.io.XMLWriter

首先,DocumentHelper.createDocument(),创建 org.dom4j.Document 的实例 doc

接着,通过doc,设置xml属性doc.setXMLEncoding("utf-8")、doc.addElement("root")根节点,以及子节点等

然后,定义xml格式并输出,new XMLWriter(xmlWriter, outputFormat)


 
public String dom4jXMLCreate(){ 
  StringWriter xmlWriter = new StringWriter(); 
  Person []persons = new Person[3];    // 创建节点Person对象 
  persons[0] = new Person(1, "sunboy_2050", "Http://bloGCsdnnet/sunboy_2050"); 
  persons[1] = new Person(2, "baidu", "http://wwwbaiducom"); 
  persons[2] = new Person(3, "Google", "http://wwwgooglecom"); 
  try { 
    orgdom4jDocument doc = DocumentHelpercreateDocument(); 
    docsetXMLEncoding("utf-8"); 
    orgdom4jElement eleRoot = docaddElement("root"); 
    eleRootaddAttribute("author", "homer"); 
    eleRootaddAttribute("date", "2012-04-25"); 
    eleRootaddComment("dom4j test"); 
    int personsLen = personslength; 
    for(int i=0; i<personsLen; i++){ 
      Element elePerson = eleRootaddElement("person");  // 创建person节点,引用类为 orgdom4jElement 
      Element eleId = elePersonaddElement("id"); 
      eleIdaddText(persons[i]getId()+""); 
      Element eleName = elePersonaddElement("name"); 
      eleNameaddText(persons[i]getName()); 
      Element eleBlog = elePersonaddElement("blog"); 
      eleBlogaddText(persons[i]getBlog()); 
    } 
    orgdom4jioOutputFormat outputFormat = new orgdom4jioOutputFormat();  // 设置xml输出格式 
    outputFormatsetEncoding("utf-8"); 
    outputFormatsetIndent(false); 
    outputFormatsetNewlines(true); 
    outputFormatsetTrimText(true); 
    orgdom4jioXMLWriter output = new XMLWriter(xmlWriter, outputFormat);   // 保存xml 
    outputwrite(doc); 
    outputclose(); 
  } catch (Exception e) { 
    eprintStackTrace(); 
  } 
  savedXML(fileName, xmlWritertoString()); 
  return xmlWritertoString(); 
} 

运行结果:

3、Dom4j 解析 XML

Dom4j,解析xml主要用到了org.dom4j.io.SAXReader、org.dom4j.Document、doc.getRootElement(),以及ele.getName()、ele.getText()等

首先,创建SAXReader的实例reader,读入xml字节流 reader.read(is)

接着,通过doc.getRootElement()得到root根节点,利用迭代器取得root下一级的子节点eleRoot.elementIterator()等

然后,得到解析的xml内容xmlWriter.append(xmlHeader)、xmlWriter.append(personsList.get(i).toString())

解析一:标准解析(Iterator 迭代)


 
public String dom4jXMLResolve(){ 
  StringWriter xmlWriter = new StringWriter(); 
  InputStream is = readXML(fileName); 
  try { 
    SAXReader reader = new SAXReader(); 
    orgdom4jDocument doc = readerread(is); 
    List<Person> personsList = null; 
    Person person = null; 
    StringBuffer xmlHeader = new StringBuffer(); 
    Element eleRoot = docgetRootElement();   // 获得root根节点,引用类为 orgdom4jElement 
    String attrAuthor = eleRootattributeValue("author"); 
    String attrDate = eleRootattributeValue("date"); 
    xmlHeaderappend("root")append("\t\t"); 
    xmlHeaderappend(attrAuthor)append("\t"); 
    xmlHeaderappend(attrDate)append("\n"); 
    personsList = new ArrayList<Person>(); 
    // 获取root子节点,即person 
    Iterator<Element> iter = eleRootelementIterator(); 
    for(; iterhasNext(); ) { 
      Element elePerson = (Element)iternext(); 
      if("person"equals(elePersongetName())){ 
        person = new Person(); 
        // 获取person子节点,即id、name、blog 
        Iterator<Element> innerIter = elePersonelementIterator(); 
        for(; innerIterhasNext();) { 
          Element ele = (Element)innerIternext(); 
          if("id"equals(elegetName())) { 
            String id = elegetText(); 
            personsetId(IntegerparseInt(id)); 
          } else if("name"equals(elegetName())) { 
            String name = elegetText(); 
            personsetName(name); 
          } else if("blog"equals(elegetName())) { 
            String blog = elegetText(); 
            personsetBlog(blog); 
          } 
        } 
        personsListadd(person); 
        person = null; 
      } 
    } 
    xmlWriterappend(xmlHeader); 
    int personsLen = personsListsize(); 
    for(int i=0; i<personsLen; i++) { 
      xmlWriterappend(personsListget(i)toString()); 
    } 
  } catch (DocumentException e) { 
    eprintStackTrace(); 
  } catch (Exception e) { 
    eprintStackTrace(); 
  } 
  return xmlWritertoString(); 
} 

运行结果:

解析二:选择性解析(XPath路径)

Dom4j+XPath,选择性只解析id,doc.selectnodes("//root//person//id")


 
public String dom4jXMLResolve2(){ 
  StringWriter xmlWriter = new StringWriter(); 
  InputStream is = readXML(fileName); 
  try { 
    orgdom4jiOSAXReader reader = new orgdom4jioSAXReader(); 
    orgdom4jDocument doc = readerread(is); 
    List<Person> personsList = null; 
    Person person = null; 
    StringBuffer xmlHeader = new StringBuffer(); 
    Element eleRoot = docgetRootElement();   // 获得root根节点,引用类为 orgdom4jElement 
    String attrAuthor = eleRootattributeValue("author"); 
    String attrDate = eleRootattributeValue("date"); 
    xmlHeaderappend("root")append("\t\t"); 
    xmlHeaderappend(attrAuthor)append("\t"); 
    xmlHeaderappend(attrDate)append("\n"); 
    personsList = new ArrayList<Person>(); 
    @SuppressWarnings("unchecked") 
    List<Element> idList = (List<Element>) docselectNodes("//root//person//id");  // 选择性获取全部id 
    Iterator<Element> idIter = idListiterator(); 
    while(idIterhasNext()){ 
      person = new Person(); 
      Element idEle = (Element)idIternext(); 
      String id = idElegetText(); 
      personsetId(IntegerparseInt(id)); 
      personsListadd(person); 
    } 
    xmlWriterappend(xmlHeader); 
    int personsLen = personsListsize(); 
    for(int i=0; i<personsLen; i++) { 
      xmlWriterappend("id = ")append(personsListget(i)getId()+"")append("\n"); 
    } 
  } catch (DocumentException e) { 
    eprintStackTrace(); 
  } catch (Exception e) { 
    eprintStackTrace(); 
  } 
  return xmlWritertoString(); 
} 

注:借助 XPath 解析 XML 时,需要导入 jaxen;

Jaxen is an open source XPath library written in Java. It is adaptable to many different object models, including DOM, XOM, dom4j, and JDOM. Is it also possible to write adapters that treat non-XML trees such as compiled Java byte code or Java beans as XML, thus enabling you to query these trees with XPath too.

运行结果:

4、Person类

请参见前面博客 Android 创建与解析XML(二)—— Dom方式 【4、Person类】

您可能感兴趣的文章:Android开发之DOM解析xml文件的方法Android编程解析XML方法详解(SAX,DOM与PULL)Android创建与解析XML(二)——详解Dom方式Android应用中使用DOM方式解析XML格式数据的基本方法Android解析XML的三种方式SAX、Pull、Dom详解Android之解析XML文件三种方式(DOM,PULL,SAX)Android利用SAX对XML进行增删改查操作详解Android利用Dom对XML进行增删改查操作详解


--结束END--

本文标题: Android 创建与解析XML(五)——详解Dom4j方式

本文链接: https://www.lsjlt.com/news/23055.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java dom4j生成与解析XML案例详解
    一)dom4j介绍 使用方式:在pom.xml中导入dom4j对应的jar <dependency> <groupId>dom4j</gro...
    99+
    2024-04-02
  • Dom4j解析xml复杂多节点报文方式
    目录Dom4j解析xml复杂多节点报文XML的解析方式分为四种本文介绍的是DOM4J方式解析主要核心代码如下dom4j解析多层xmlDom4j解析xml复杂多节点报文 XML是一种通...
    99+
    2024-04-02
  • Java解析xml文件和json转换的方法(DOM4j解析)
    Java解析xml的方法有四种: DOM解析 SAX解析 JDOM解析 DOM4J解析 本次主要介绍使用DOM4j进行解析: 这里我主要使用两种方...
    99+
    2024-04-02
  • java使用dom4j生成与解析xml文档的方法示例
    本文实例讲述了java使用dom4j生成与解析xml文档的方法。分享给大家供大家参考,具体如下:xml是一种新的数据格式,主要用于数据交换。我们所用的框架都有涉及到xml。因此解析或生成xml对程序员也是一个技术难点。这里就用dom4j来生...
    99+
    2023-05-31
    java dom4j xml
  • 详解Java创建线程的五种常见方式
    目录Java中如何创建线程呢?1.显示继承Thread,重写run来指定现成的执行代码。2.匿名内部类继承Thread,重写run来执行线程执行的代码。3.显示实现Runnable接...
    99+
    2024-04-02
  • Android AlertDialog六种创建方式案例详解
    目录一、setMessage:设置对话框内容为简单文本内容二、setItem:设置文本框内容为简单列表项三、setSingleChoiceItems()设置对话框内容为单选列表项四、...
    99+
    2024-04-02
  • Android中创建子线程的方式详解
    在 Android 中,创建子线程的方式通常有以下几种: 使用 Thread 类进行创建 Thread 是 Java 中的一个类,可以通过继承 Thread 类或者创建 Thread...
    99+
    2023-05-18
    Android创建子线程方式 Android创建子线程 Android子线程
  • Android AlertDialog多种创建方式案例详解
    目录一、setMessage:设置对话框内容为简单文本内容二、setItem:设置文本框内容为简单列表项三、setSingleChoiceItems()设置对话框内容为单选列表项四、...
    99+
    2024-04-02
  • Java解析XML(4种方式)案例详解
    在Java中,有多种方式可以解析XML文件。下面是四种常用的方式:1. DOM(Document Object Model)方式:D...
    99+
    2023-08-11
    java
  • Java解析XML(4种方式)案例详解
    目录1.DOM方式2.SAX方式3.JDOM方式4.DOM4J方式总结 xml文件 <?xml version="1.0" encoding="utf-8" ...
    99+
    2024-04-02
  • Android编程实现XML解析与保存的三种方法详解
    本文实例讲述了Android编程实现XML解析与保存的三种方法。分享给大家供大家参考,具体如下:简介在Android开发中,关于XML解析有三种方式,分别是: SAX 基于事件的解析器,解析速度快,占用内存少。非常适合在Android移动设...
    99+
    2023-05-30
    android xml roi
  • Android编程使用sax解析xml数据的方法详解
    本文实例讲述了Android编程使用sax解析xml数据的方法。分享给大家供大家参考,具体如下:随着技术的发展,现在的web已经和以前不同了。web已经逐渐像移动的方向倾斜,作为程序员的确应该拓展一下自己的知识层面。学习各方面的知识,今天就...
    99+
    2023-05-30
    android sax xml
  • Java创建线程的方式解析
    目录继承Thread,这里使用匿名内部类实现Runnable接口,配合Thread类,同样用匿名内部类FutureTask配合Thread继承Thread,这里使用匿名内部类 @Sl...
    99+
    2024-04-02
  • Android中怎么使用pull方式解析xml格式文件
    这篇文章将为大家详细讲解有关Android中怎么使用pull方式解析xml格式文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体如下:<xml version="...
    99+
    2023-05-30
    android pull xml
  • Java解析XML的四种方式
    xml文件 <?xml version="1.0" encoding="utf-8" ?> <class> <studen...
    99+
    2024-04-02
  • 详解Android Dialog对话框的五种形式
    Android中的对话框形式大致可分为五种:分别是一般对话框形式,列表对话框形式,单选按钮对话框,多选按钮对话框,自定义对话框。在实际开发中,用系统的对话框会很少,因为太丑了,美工不愿意,多是使用自定义对话框。当然学会系统的,自定义就简单了...
    99+
    2023-05-31
    android dialog 对话框
  • Java解析XML的方式有哪些
    这篇文章将为大家详细讲解有关Java解析XML的方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。xml文件<xml version="1.0" enc...
    99+
    2023-06-22
  • Android编程之数据库的创建方法详解
    本文实例讲述了Android编程之数据库的创建方法。分享给大家供大家参考,具体如下:主javapackage com.itheima.createdatabase;import android.app.Activity;import and...
    99+
    2023-05-30
    android 数据库 创建
  • JavaSE XML解析技术的使用方法详解
    目录XML解析技术XML解析技术介绍Dom4j解析XML文件Dom4j解析各个节点Dom4j解析案例实战总结XML解析技术 XML解析技术介绍 XML的数据作用是什么 最终需要怎样处...
    99+
    2023-05-15
    javase xml解析 java解析xml数据 java解析xml配置文件
  • 详解Java中的八种单例创建方式
    目录定义使用场景单例模式八种方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(同步方法)懒汉式(同步代码块)双重检查锁方式静态内部类方式枚举方式总结 定义 单例设...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作