dom4解析xml格式文件实例

最近,一哥们在他们公司搞大数据时遇到一份比较棘手的xml文件,需要进行巧妙合理的解析,然后将数据进行封装和保存,由于文件比较大,数据比较多,格式稍微复杂一点,所以我帮他解决,刚拿到文件也觉得无从下手,因为文件中的数据格式确实有点复杂。以下给4种常见的xml文件的解析方式的分析对比:

DOM DOM4J JDOM SAX

解析XML文件的几种方式和区别答:

Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的,树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改能随机访问文件内容,也可以修改原文件内容.

SAX解析 SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点线性解析,不能随机访问,也无法修改原文件

JDOM解析 JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快.JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

DOM4j解析 DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

最后相比之下选择了dom4j对其经行解析。

下面是xml文件的一部分:

考虑到上面的复杂因素,从面向对象出发,我定义了以下三个实体类对象:

每个对象的定义都比较简单:ResultSet.class,RowDetail.class,RowMaster.class的定义分别如下:

其中用到的最为关键的技术当然是xpath表达式的书写了,详情请参考:http://www.cnblogs.com/fdszlzl/archive/2009/06/02/1494836.html,下面我就直接给出我的解析代码:

以下是测试查看List<ResultSet> resuList中部分数据的输出:

时间: 2024-11-05 16:40:58

dom4解析xml格式文件实例的相关文章

使用第三方DOM解析XML格式文件

在解析XML格式文件的时候,使用SAX解析需要实现好多代理方法,比较难记,也容易出错,现在介绍一种由Google推出的第三方DOM(Document Object Model)来解析XML文件. 首先将该第三方文件拖到工程中.谷歌下载地址:https://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/ (注:由于该三方是很久之前的版本,还是基于MRC格式下的代码,所以需要改成ARC兼

Java生成和解析XML格式文件和字符串的实例代码

1.基础知识:Java解析XML一般有四种方法:DOM.SAX.JDOM.DOM4J. 2.使用介绍1).DOM(1)简介 由W3C(org.w3c.dom)提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作.优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作:缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处理. (2)示例代码: 1.基础知识:Java解析XML一般有四种方法:DOM.SAX.JDOM.DO

Android之解析XML格式数据

作用:在网络上传输数据时最常用的格式有两种,XML 和 JSON.解析XML格式数据获得与后台交互的信息. 种类: 3种:Pull 解析方式:SAX 解析方式:DOM解析方式. 1.使用Pull解析器解析XML文档Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始.文档结束.开始元素和结束元素等.使用parser.next()方法可以进入下一个元素并触发相应的事件.各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用Swift. 首先自己写一个简单的XML: <data> <person age="15">zhangsan</person> <person age="2">lisi</person> <person&

Servlet 实现上传文件以及同时,写入xml格式文件和上传

package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io

PHP解析XML格式文档

<?php// 首先要建一个DOMDocument对象$xml = new DOMDocument();// 加载Xml文件$xml->load("3.xml");// 获取所有的post标签$postDom = $xml->getElementsByTagName("PROPERTIES");print_r($postDom);echo '<br>';// 循环遍历post标签    foreach($postDom as $post

XStream解析xml格式的字符串的方法

ProcessStatusUploadRootList processStatusUploadRootList = null; try { XStream xStream = new XStream(); xStream.alias("Root", ProcessStatusUploadRootList.class); xStream.alias("Header", ProcessStatusUploadHeader.class); xStream.alias(&q

读取xml格式文件

$v = [xml]get-content d:\vmconfig.xml $v.Domain.Computer.Name vmconfig.xml内容: <?xml version="1.0" encoding="UTF-8"?><Domain><Computer><Name>stcmm-vm-s01</Name><IpAddress>192.168.0.2</IpAddress>

java socket报文通信(三)java对象和xml格式文件的相互转换

前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每次都去写字符串啊,这样的话肯定要疯.既然是面向对象的编程,肯定会有好的办法来解决这个问题.我们使用JAXBContext这个工具. package cn.com.egj.entity.shortcutTransfer.test; import java.io.BufferedReader; impo