Java解析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
(0)

相关推荐

  • java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解

    1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不是像SAX那

  • Java中构造、生成XML简明教程

    本文介绍在Java编程时,如何快速的构造一个XML片段,然后再将这个XML输出出来. 在日常使用Java开发时,经常会用到XML.XML用起来好用,但写起来烦,有没有很简单的构造与输出方法呢?且往下看. 1.导入jar包与命名空间 要在Java中使用XML,建议先导入一个jar包--dom4j.这是一个专门用于处理XML的jar包,非常好用. 然后import下面这三个类: 复制代码 代码如下: import org.dom4j.Document; import org.dom4j.Docume

  • Java访问WebService返回XML数据的方法

    本文实例讲述了Java访问WebService返回XML数据的方法.分享给大家供大家参考.具体如下: import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.io.FileNotFoundException; import java.io

  • Java连接并操作Sedna XML数据库的方法

    本文实例讲述了Java连接并操作Sedna XML数据库的方法.分享给大家供大家参考.具体分析如下: Sedna 是一个原生的XML数据库,提供了全功能的核心数据库服务,包括持久化存储.ACID事务.索引.安全.热备.UTF8等.实现了 W3C XQuery 规范,支持全文搜索以及节点级别的更新操作. import ru.ispras.sedna.driver.*; public class SednaClient { public static void main(String args[])

  • JAVA操作XML实例分析

    本文实例讲述了JAVA操作XML的方法.分享给大家供大家参考.具体如下: java代码如下: 复制代码 代码如下: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.w3c.dom.*; import org.xml.sax.SAXException; import javax.xml.

  • Java使用Jdom读取xml解析实例

    本文实例讲述了Java使用Jdom读取xml解析.分享给大家供大家参考,具体如下: package com.yanek.demo.xml.test; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMExcep

  • java 使用JDOM解析xml文件

    JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析.生成.序列化以及多种操作.JDOM直接为JAVA编程服务.它利用更为强有力的JAVA语言的诸多特性(方法重载.集合概念以及映射),把SAX和DOM的功能有效地结合起来.JDOM的官方地址:http://www.jdom.org/1.首先新建一个接口和2个类,为后续做准备[Moveable.java] 复制代码 代码如下: package com.njupt.zhb.test;public interface Mov

  • java解析xml之jdom解析xml示例分享

    复制代码 代码如下: package com.test; import java.io.File;import java.util.ArrayList;import java.util.List; import org.jdom.Document;import org.jdom.Element;import org.jdom.input.SAXBuilder; public class JdomXML { public static void main(String[] args) {     

  • java读取解析xml文件实例

    读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件转换为 dom树形结构,通过节点进行遍历. 这是W3c关于节点的概念 如果xml中包含有大量的数据,由于dom一次性把xml装入内存中的特性,所以dom不适合于包含大量数据的xml解析.当包含有大量xml的时候,用SAX进行解析比较节省内存. 下面是一个运用DOM进行解析xml文件的例子: xml文件结构如下: <?xm

  • java使用Jdom实现xml文件写入操作实例

    本文实例讲述了java使用Jdom实现xml文件写入操作的方法.分享给大家供大家参考,具体如下: package com.yanek.demo.xml.test; import java.io.File; import java.io.FileWriter; import org.jdom.Attribute; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import o

随机推荐