`
Janne
  • 浏览: 44017 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

java解析xml文件的四种方法详细讲解

阅读更多

java 解析 xml的四种方法为:Dom , Dom4j ,Sax , jdom    

一。sax,dom,jdom,dom4j的比较以及选择
SAX:
 SAX分析器在对XML文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对XML文档
的访问。由于事件触发本身是有时序性的,因此,SAX分析器提供的是一种对XML文档的顺序访问机制,
对于已经分析过的部分,不能再倒回去重新处理。SAX之所以被叫做"简单"应用程序接口,是因为SAX
分析器只做了一些简单的工作,大部分工作还要由应用程序自己去做。也就是说,SAX分析器在实现时,
它只是顺序地检查XML文档中的字节流。判断当前字节是XML语法中的哪一部分,检查是否符合XML语法
并触发相应的事件。对于事件处理函数本身,要由应用程序自己来实现。同DOM分析器相比,SAX分析器
对XML文档的处理缺乏一定的灵活性,然而,对于那些只需要访问XML文档中的数据而不对文档进行更改
的应用程序来说,SAX分析器的效率则更高。由于SAX分析器实现简单,对内存要求比较低,因此实现效
率比较高同时具有广泛的应用价值。


DOM:
  DOM分析器通过对XML文档的分析,把整个XML文档以一棵DOM树的形式存放在内存中,应用程序可以
随时对DOM树中的任何一个部分进行访问与操作,也就是说,通过DOM树,应用程序可以对XMLwen档进
行随机访问。这种访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中
的内容。然而,由于DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当XML文档比较大或
者文档结构比较复杂时,对内存的需求就比较高。而且,对于结构复杂的树的遍历也是一项比较耗时的
操。所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。不过,由于DOM分析器的树结
构的思想与XML文档的结构相吻合,而且,通过DOM树机制很容实现随机访问。因此DOM分析器也有较为
广泛的使用价值。

JDOM
  JDOM是处理XML的纯JAVA API。使用具体类而不用接口,既要生成大多数节点类型的实例,只要将
一两个变元传入即可。是目前表现优秀的处理XML的JAVA API。



SAX
  优点:①无需将整个文档加载到内存,因而内存消耗少
      ②推模型允许注册多个ContentHandler 
  缺点:①没有内置的文档导航支持
      ②不能够随机访问XML文档
      ③不支持在原地修改XML 
      ④不支持名字空间作用域最适合于:只从XML读取数据的应用程(不可用于操作或修改XML文档)


DOM 
   优点:①易于使用
       ②丰富的API集合,可用于轻松地导航
       ③整棵树加载到内存,允许对XML文档进行随机访问

   缺点:①整个XML文档必须一次解析完
        ②将整棵树加载到内存成本较高
        ③一般的DOM节点对于必须为所有节点创建对象的对象类型绑定不太理想最适合于:需要修改
XML文档的应用程序或XSLT应用程序(不可用于只读XML的应用程序) 
 

JDOM
   优点:①是基于树的处理XML的Java API,把树加载在内存中
       ②没有向下兼容的限制,因此比DOM简单
       ③速度快,缺陷少
       ④具有SAX的JAVA规则
  缺点:①不能处理大于内存的文档
       ②JDOM表示XML文档逻辑模型。不能保证每个字节真正变换。
       ③针对实例文档不提供DTD与模式的任何实际模型。
       ④不支持与DOM中相应遍历包最适合于:JDOM具有树的便利,也有SAX的JAVA规则。在需要平
衡时使用DOM4J虽然DOM4J 代表了完全独立的开发结果,但最初,它是JDOM 的一种智能分支。它合并
了许多超出基本XML文档表示的功能,包括集成的XPath 支持、XML Schema 支持以及用于大文档或
流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API 和标准DOM 接口具
有并行访问功能。从2000 下半年开始,它就一直处于开发之中。为支持所有这些功能,DOM4J 使用接
口和抽象基本类方法。DOM4J 大量使用了API 中的Collections 类,但是在许多情况下,它还提供
一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DoM4J 付出了更复杂的API
 的代价,但是它提供了比JDOM 大得多的灵活性。在添加灵活性、XPath 集成和对大文档处理的目标
时,DOM4J 的目标与JDOM 是一样的:针对Java 开发者的易用性和直观操作。它还致力于成为比
JDOM 更完整的解决方an,实现在本质上处理所有Java/XML 问题的目标。在完成该目标时,它比
JDOM 更少强调防止不正确的应用程序行为。DOM4J 是一个非常非常优秀的Java XML API,具有
性能优异、功能强大和极端易用使用
的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java 
软件都在使用DOM4J 来读写XML,特别值得一提的是连Sun 的JAXM 也在用DOM4J。


总述
JDOM 和DOM 在性能测试时表现不佳,在测试10M 文档时内存溢出。在小文档情况下还值得考虑使用
DOM 和JDOM。虽然JDOM 的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点
来看,它确实没有值得推荐之处。另外,DOM 仍是一个非常好的选择。DOM 实现广泛应用于多种编程
语言。它还是许多其它与XML 相关的标准的基础,因为它正式获得W3C 推荐(与基于非标准)Java 
模型相对),所以在某些类型的项目中可能也需要它(如在javascript 中使用DOM)。


SAX表现较好,这要依赖于它特定的解析方式。一个SAX 检测即将到来的XML流,
但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。无疑,
DOM4J是最好的,目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate 也用DOM4J 来
读取XML 配置文件。如果不考虑可移植性,那就采用DOM4J吧!

 

 一.DOM解析XML

需要的引用的类:

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

//下面主要是org.xml.sax包的类

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

步骤:

     1.得到DOM的解析工厂:

DocumentBuilderFactory  factory

=  DocumentBuiderfactory.newInstance();

得到javax.xml.parsers.DocumentBuilderFactory;类的实例就

是我们要的解析器工厂

 

         2.DOM工厂获得DOM解析器(DOmBuilder

              DocumentBuilder builder = factory.newDocumnetBuid();

 通过javax.xml.parsers.DocumentBuilderFactory实例的静态

 方法newDocumentBuilder()得到DOM解析器

 

        ( 3.把要解析的xml文档转化为输入流,以便DOM解析器解析它

  InputStream in = new InputStream(user.xml);

InputStream 是一个接口

         

          4.解析xml文档的输入流 ,得到一个Document

 Document doc = builder.parse(in);

XML文档的输入流得到一个org.w3c.dom.Document对象,

以后的处理都是对Document对象进行的

<!--[if !supportLists]-->5.<!--[endif]--> 得到xml文档的根节点

Element root = document.getDocumentElement();

 DOM中只有根节点是一个org.w3c.dom.Element对象

 

<!--[if !supportLists]-->6.<!--[endif]--> 得到节点的子节点

   NodeList users =root.getChildNodes();

Forint i=0;i<users.getLength();i++{

    Node user = users.item(i);

}

这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的,

还有一种轮循子节点的方法,后面有介绍

 

<!--[if !supportLists]-->7.<!--[endif]--> 取得节点的属性值

String name = user.getAttributes().getNamedItem(name);

节点的属性也是它的子节点。它的节点类型也是node.ELEMENT_NODE

 

<!--[if !supportLists]-->8.<!--[endif]--> 轮循子节点

  For(Node node = user.getFirstChild();node!=null;node=node.getNextSibling()){

If(node.getNodeType()==Node.Element_NONE){

  If(node.getNodeName().equals(name)){

  String name=node.getNodeValue();

                                         String name1=node.getFirstChild().getNodeValue();

                                          System.out.println(name);

                                           System.out.println(name1)

}

}

}

子节点的节点类型也是Node.ELEMENT_NODE型的,node.getNextSibling()方法是取下一个相邻的节点

<!--EndFragment-->

    

2.SAX解析XML

    

 

 

 

 

SAX解析xml

 

   1.编写java代码解析xml

 

<!--[if !supportLists]-->1.<!--[endif]-->创建SAXParserFactory

 

SAXParserFactory spf = SAXParserFactory.newInstance();

 

<!--[if !supportLists]-->2.<!--[endif]-->创建SAXParser:

 

 SAXParser sp = spf.newSAXParser(); 

 

          3. SaxParserService handle = new SaxParseService();

 

          4. 解析XML文档,并回调处理器的相应事件

 

 Sp.parse(file,handle);

 

           5.实现startElement......)和EndElement......),characters(.....)方法

 

 

 

 

 

3.DOM4j解析xml

 

http://wenku.baidu.com/view/0231eb482e3f5727a5e96209.html讲得很详细,在这里不细说了

<!--EndFragment-->

 

4.JDOM解析xml

 

//创建一个SAXBuilder对象
              SAXBuilder saxBuilder = new SAXBuilder();            
            //读取prop.xml资源
              Document doc = saxBuilder.build("src/users.xml");
            //获取根元素(prop)
            Element root = doc.getRootElement();
            //获取根元素下面的所有子元素(mess)
            List<Element> messList = root.getChildren("users");
            //子根元素(mess)
            Element childrenRoot = null;
            //property元素集合
              List<Element> propertyList = null;
            //遍历根元素的子元素集合(即遍历mess元素)
            for(int i = 0; i < messList.size(); i++){
                 //将根元素prop下的mess子元素作为一个新的子根元素
                   childrenRoot = messList.get(i);
                //获取子根元素mess下的所有property子元素
                   propertyList = childrenRoot.getChildren("type");
                //遍历子根元素的子元素集合(即遍历property元素)
                for(int j = 0; j < propertyList.size(); j++){
                    //获取property元素
                       Element element = propertyList.get(j);
                       System.out.println(element.getAttributeValue("uuid"));
                    //element.getAttributeValue("name"):获取property中name属性的值
                       if(element.getAttributeValue("name").equals(name)){        //如果name的值一致
                          return element.getAttributeValue("value");            //取得name对应的value属性值
                       }
                }
            }
            //遍历完没有查找到结果返回null
            return null;

 

 

<!--EndFragment--><!--EndFragment--><!--EndFragment-->

 

 

 

  • 大小: 58.3 KB
分享到:
评论

相关推荐

    java解析XML文件

    Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...

    java 解析xml 多级

    本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:DOM(文档对象模型)和SAX(简单API for XML)。DOM解析器会将整个XML文件加载到内存中,形成一个树形...

    java解析XML详解

    本文将深入探讨Java解析XML的各种方法及其应用场景,旨在为读者提供全面而深入的理解。 ### Java解析XML的主要方法 #### 1. DOM(Document Object Model) DOM是一种树形结构的数据模型,用于表示XML文档的结构。...

    解析XML文件的四种方式整合

    本文将详细讲解四种解析XML文件的方法,旨在帮助初学者更好地理解和掌握XML处理技术。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,构建一个树形结构,称为DOM树。这个方法的优点...

    Java SAX解析Xml文档Demo

    本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...

    java解析xml动态生成树形菜单结构

    总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...

    JAVA调用webservice并解析xml

    在IT行业中,调用Web服务并解析XML是常见的任务,特别是在Java开发中。Web服务,尤其是基于SOAP(Simple Object Access Protocol)的,提供了一种标准的跨平台、跨语言的数据交换方式。本教程将深入讲解如何在Java...

    解析XML特殊字符方法

    有两种主要方法来解析XML中的特殊字符: **方法一:使用实体引用** 实体引用是XML中最常见的处理特殊字符的方式。当你需要在XML文档中插入特殊字符时,可以使用对应的实体引用。比如,如果你想在文本中包含一个...

    java_dom解析xml xml java

    标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到这是一个适合新手入门的内容,并给出了一个简单的XML示例。该XML文档包含了一个`...

    java解析xml文件

    以下是关于Java解析XML文件的关键知识点和详细解释: 1. **DOM解析器**:Java中解析XML最常用的方法之一是DOM(Document Object Model)解析。DOM将整个XML文件加载到内存中,形成一棵树形结构,允许程序通过节点...

    JAVA解析XML

    本篇文章将详细介绍Java中四种主要的XML解析方法:SAX(Simple API for XML)、DOM(Document Object Model)、DOM4J和JDOM,并通过示例代码展示它们的用法。 1. **SAX解析器**: SAX是一种基于事件驱动的解析方式...

    java 解析XML修改路径值

    本篇文章将详细讲解如何使用Java解析XML文件,并修改其中的特定路径值。 首先,我们需要了解Java中解析XML的两个主要库:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个XML文档到...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    - 解析XML文件:调用`parse()`方法解析XML文件,返回一个`Document`对象。 - 访问XML数据:通过`Document`对象的`getElementsByTagName()`、`getFirstChild()`等方法遍历并获取元素、属性和文本。 2. SAX解析: SAX...

    JAVA高手解析XML配置文件的读取操作.pdf

    本文对 Java 中的 XML 配置文件读取操作进行了详细的讲解,并提供了一个使用 SAX 解析器读取 XML 配置文件的示例程序,对 Java 开发者来说非常实用。 知识点: 1. XML 配置文件在 Java 开发中的应用 2. DOM 和 SAX...

    java 解析xml获取节点内容

    本教程将详细讲解如何在Java中解析XML文件,获取节点内容,且无需引入额外的jar包,如DOM、SAX或StAX解析器。 首先,Java标准库提供了`java.io`和`javax.xml.parsers`包,它们包含了基本的XML处理能力。这里我们将...

    java解析XML

    Java解析XML是一个重要的主题,尤其在处理结构化数据和与Web服务交互时。XML(可扩展标记语言)是一种用于标记数据的语言,具有自解释性,易于人类阅读和编写,同时也方便机器解析和生成。在Java中,有多种库和API...

    Java解析XML文档(二):sax读取xml文件导出excel

    本文将深入讲解如何使用SAX(Simple API for XML)解析XML文档,并将解析结果导出到Excel文件中。SAX是一种事件驱动的解析方式,相比DOM(Document Object Model)解析,它更节省内存,适用于处理大型XML文件。 ...

    java读取xml文件

    Java 读取 XML 文件是 Java 开发中常见的一项任务,XML(eXtensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等领域。本教程将深入讲解如何在 Java 中处理 XML 文件,同时涉及 XML 的 ...

Global site tag (gtag.js) - Google Analytics