Java解析XML格式数据的方法详解

 更新时间:2015年10月26日 08:55:17   投稿:goldensun  
这篇文章主要介绍了Java解析XML格式数据的方法,并展示了较为常用的Java dom来解析XML的例子,需要的朋友可以参考下

最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容存储和表现分离等等优势注定了该语言从诞生之日起就会走向辉煌。 XML 语言在成为 W3C 标准之后进入到了一个快速发展的时期,当然它本身所具有的一系列优点和优势也注定了各大技术厂商对它的偏爱,Java 作为软件行业的一种开发技术也迅速作出了反应,出现了多种对 XML 支持的工具,本文将会从这个角度对 Java 处理 XML 的几种主流技术进行介绍,希望能对您有所帮助。
Java 有哪些优秀的类库及工具便于程序员对 XML 进行处理 ?

XML 三种解析方式简介
大名鼎鼎的 DOM
说它大名鼎鼎可是一点不为过,DOM 是 W3C 处理 XML 的标准 API,它是许多其它与 XML 处理相关的标准的基础,不仅是 Java,其它诸如 Javascript,PHP,MS .NET 等等语言都实现了该标准, 成为了应用最为广泛的 XML 处理方式。当然,为了能提供更多更加强大的功能,Java 对于 DOM 直接扩展工具类有很多,比如很多 Java 程序员耳熟能详的 JDOM,DOM4J 等等, 它们基本上属于对 DOM 接口功能的扩充,保留了很多 DOM API 的特性,许多原本的 DOM 程序员甚至都没有任何障碍就熟练掌握了另外两者的使用,直观、易于操作的方式使它深受广大 Java 程序员的喜爱。
绿色环保的 SAX
SAX 的应运而生有它特殊的需要,为什么说它绿色环保呢,这是因为 SAX 使用了最少的系统资源和最快速的解析方式对 XML 处理提供了支持。 但随之而来繁琐的查找方式也给广大程序员带来许多困扰,常常令人头痛不已,同时它对 XPath 查询功能的支持,令人们对它又爱又恨。
默默无闻的 Digester:XML 的 JavaBean 化
Digester 是 apache 基金组织下的一个开源项目,笔者对它的了解源于对 Struts 框架的研究,是否有很多程序员想要一解各大开源框架的设计甚至想要自己写一个功能强大的框架时会碰到这样一个难题: 这些形形色色的用 XML 语言标记的框架配置文件,框架底层是用什么技术来解析呢? DOM 解析耗费时间,SAX 解析又过于繁琐,况且每次解析系统开销也会过大, 于是,大家想到需要用与 XML 结构相对应的 JavaBean 来装载这些信息,由此 Digester 应运而生。它的出现为 XML 转换为 JavaBean 对象的需求带来了方便的操作接口,使得更多的类似需求得到了比较完美的解决方法, 不再需要程序员自己实现此类繁琐的解析程序了。与此同时 SUN 也推出了 XML 和 JavaBean 转换工具类 JAXB,有兴趣的读者可以自行了解。


下面来看一个Java dom解析XML的例子:

import java.io.*;  
import org.w3c.dom.*;  
import org.xml.sax.SAXException;  
import javax.xml.parsers.*;  
public class Xml {  
  public static void main(String[] args) {  
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
    try {  
      DocumentBuilder builder = factory.newDocumentBuilder();  
      Document doc = builder.parse(new File("E:\\work\\test\\xml1.xml"));  
      NodeList nl = doc.getElementsByTagName("book");  
      for (int i = 0; i < nl.getLength(); i++) {  
        System.out.println(nl.item(i).getAttributes().item(0));  
        System.out.println(doc.getElementsByTagName("title").item(i)  
            .getFirstChild().getNodeValue());  
        System.out.println(doc.getElementsByTagName("title").item(i)  
            .getAttributes().item(0));  
        System.out.println(doc.getElementsByTagName("author").item(i)  
            .getFirstChild().getNodeValue());  
        System.out.println(doc.getElementsByTagName("year").item(i)  
            .getFirstChild().getNodeValue());  
        System.out.println(doc.getElementsByTagName("price").item(i)  
            .getFirstChild().getNodeValue());  
        System.out.println();  
      }  
    } catch (ParserConfigurationException e) {  
      e.printStackTrace();  
    } catch (SAXException e) {  
      e.printStackTrace();  
    } catch (IOException e) {  
      e.printStackTrace();  
    }  
  }  
}  

 xml:

<bookstore> 
<book category="COOKING"> 
 <title lang="en">Everyday Italian</title> 
 <author>Giada De Laurentiis</author> 
 <year>2005</year> 
 <price>30.00</price> 
</book> 
<book category="CHILDREN"> 
 <title lang="en">Harry Potter</title> 
 <author>J K. Rowling</author> 
 <year>2005</year> 
 <price>29.99</price> 
</book> 
<book category="WEB"> 
 <title lang="en">Learning XML</title> 
 <author>Erik T. Ray</author> 
 <year>2003</year> 
 <price>39.95</price> 
</book> 
</bookstore>

结果:

category="COOKING"
Everyday Italian
lang="en"
Giada De Laurentiis
2005
30.00

category="CHILDREN"
Harry Potter
lang="en"
J K. Rowling
2005
29.99

category="WEB"
Learning XML
lang="en"
Erik T. Ray
2003
39.95

相关文章

  • java中的String定义的字面量最大长度是多少

    java中的String定义的字面量最大长度是多少

    这篇文章主要介绍了java中的String定义的字面量最大长度是多少,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • java中MultipartFile互转File的方法

    java中MultipartFile互转File的方法

    本文主要介绍了java中MultipartFile互转File的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 关于Java中反射机制的深入讲解

    关于Java中反射机制的深入讲解

    反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性,下面这篇文章主要给大家介绍了关于Java中反射机制的相关资料,需要的朋友可以参考下
    2018-08-08
  • java实现从网上下载图片到本地的方法

    java实现从网上下载图片到本地的方法

    这篇文章主要介绍了java实现从网上下载图片到本地的方法,涉及java针对文件操作的相关技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • Spring在@ConditionalOnProperty注解使用详解

    Spring在@ConditionalOnProperty注解使用详解

    这篇文章主要介绍了Spring在@ConditionalOnProperty注解使用详解,@ConditionalOnProperty注解是Spring Boot的条件注解,主要用法是根据配置文件中的属性来控制某个配置类是否生效,或者控制某个Bean是否被创建,需要的朋友可以参考下
    2023-11-11
  • SpringCloud中Zuul网关原理及其配置

    SpringCloud中Zuul网关原理及其配置

    Spring Cloud是一个基于Spring Boot实现的微服务应用开发工具,其中的Zuul网关可以实现负载均衡、路由转发、鉴权、限流等功能,本文将从Spring Cloud中Zuul网关的原理、使用场景和配置过程详细介绍,帮助大家更好地了解和应用Zuul网关,需要的朋友可以参考下
    2023-06-06
  • 远程debug调试入门

    远程debug调试入门

    这篇文章主要介绍了Eclipse的Debug调试技巧大全(总结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧吗,希望能给你带来帮助
    2021-06-06
  • 解决@Api注解不展示controller内容的问题

    解决@Api注解不展示controller内容的问题

    这篇文章主要介绍了解决@Api注解不展示controller内容的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • 详解Java如何判断一个对象是否为空

    详解Java如何判断一个对象是否为空

    我们在刚开始学习Java的时候,遇到过最多的异常肯定是臭名昭著的空指针异常(NullPointerException),可以说它陪伴了我们整个初学阶段,那么如何优雅的判断一个对象是否为空并且减少空指针异常呢,
    2024-01-01
  • Java设计模式之组合模式(Composite模式)介绍

    Java设计模式之组合模式(Composite模式)介绍

    这篇文章主要介绍了Java设计模式之组合模式(Composite模式)介绍,Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性,需要的朋友可以参考下
    2015-03-03

最新评论