`
dzq2008
  • 浏览: 92742 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

在Java中解析XML

阅读更多

XML在程序的开发中的地位越来越重要,我们经常的需要在编程中解析XML文档。在Java中解析XML文档有多种方式,每种方式都有它的特点。在此我们通过使用不同的解析方式解析XML文档来进行演示

首先是采用DOM(Document Object Model文档对象模型)的方式。采用此方式解析XML文档的时候,将XML文档整体加载,并形成文档对象树。文档中的所有内容都会形成树的节点(无论是 元素、属性还是文本)。这样我们可以采用随机读取的方式进行读取。优点是我们解析文档时可以采用任意的顺序进行内容的操作,操作灵活。但是文档需要整体加 载。所以当文档的内容比较大的时候,而且我们只需要读取其中的一小部分内容,显然是有问题的。因此,如果我们读取的xml文档相对较小时可以采用此方式。 此方式编程也相对简单。(Ajax操作XML和Html一般采用此方式)

假设我们存在如下的xml文档,名称为:student.xml,我们通过DOM的方式解析文档中的内容

<?xml version="1.0" encoding="UTF-8"?>
<students>
 <student>
  <name>Tom</name>
  <age>20</age>
  <skill>java</skill>
 </student>
 <student>
  <name>Mike</name>
  <age>23</age>
  <skill>.net</skill>
 </student>
</students>

 采用DOM解析上述文档的Java代码如下:

package com.frank.xml;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DOMSample {

 /**
  * @param args
  * @throws IOException
  * @throws SAXException
  */
 public static void main(String[] args){
  File file=new File("students.xml");
  DocumentBuilderFactory fac=DocumentBuilderFactory.newInstance();
  DocumentBuilder documentBuilder;
  try {
   documentBuilder = fac.newDocumentBuilder();
   Document document=documentBuilder.parse(file);
   NodeList nodeList=document.getElementsByTagName("student");
   for(int i=0;i<nodeList.getLength();i++){
    //System.out.print(document.getElementsByTagName("name").item(i).getFirstChild().getNodeValue());
    //System.out.print("===");
    //System.out.print(document.getElementsByTagName("age").item(i).getFirstChild().getNodeValue());
    //System.out.print("===");
    //System.out.print(document.getElementsByTagName("skill").item(i).getFirstChild().getNodeValue());
    System.out.print(nodeList.item(i).getChildNodes().item(1).getFirstChild().getNodeValue());
    System.out.print("===");
    System.out.print(nodeList.item(i).getChildNodes().item(3).getFirstChild().getNodeValue());
    System.out.print("===");
    System.out.print(nodeList.item(i).getChildNodes().item(5).getFirstChild().getNodeValue());
    System.out.println("");
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

 输出结果如下:

Tom===20===java
Mike===23===.net

注意注释部分,同样可以完成解析文档的过程。为什么在实现的时候得到子节点用到的序号为1,3,5呢?因为每一个student拥有的子节点数为7而不是3,文本和student包含的文本(这里为空)同样是子节点。

采用SAX进行XML解析

采用SAX解析XML是顺序性的。就是自上而下解析XML文 档。采用的是事件驱动机制。当遇到一个节点的时候马上进行处理,而不是等到文档整体加载后处理。SAX解析方式利用所提供的若干个方法。当遇到文档中的某 部分时,利用回调机制调用相应的方法进行适当的处理。例如,SAX存在操作节点的方法:startElement和endElement

当遇到一个开始节点时调用startElement,后遇到一个结束节点时调用endElement。我们可以在这两个方法中写具体的处理过程实现对XML文档的解析,读取内容时利用所提供的另外一个方法characters

另外还有解析文档开始时候调用的startDocument和文档解析结束时调用endDocument

采用SAX解析不用整体加载文档,所以在解析比较大的文档的时候比较适合采用SAX方式。而且解析速度要优于DOM,但是操作过程编码要麻烦一些。

同样我们解析刚才的students.xml,利用SAX,可以如下:

package com.frank.xml;

import java.util.Stack;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAXSample extends DefaultHandler {
 Stack tags = new Stack();
 /**
  * @param args
  */
 public static void main(String[] args) {
  try{
   SAXParserFactory factory=SAXParserFactory.newInstance();
   SAXParser sAXParser=factory.newSAXParser();
   SAXSample sAXSample=new SAXSample();
   sAXParser.parse(new InputSource("students.xml"), sAXSample);
  }catch(Exception ex){
   ex.printStackTrace();
  }

 }

 @Override
 public void characters(char ch[], int start, int length)
   throws SAXException {
  // TODO Auto-generated method stub
  String tag = (String) tags.peek();
  if(tag.equals("name")){
   System.out.println("name="+new String(ch, start, length));
  }
  if(tag.equals("age")){
   System.out.println("age="+new String(ch, start, length));
  }
  if(tag.equals("skill")){
   System.out.println("skill="+new String(ch,start,length));
  }
 }

 @Override
 public void endElement(String arg0, String arg1, String arg2)
   throws SAXException {
  // TODO Auto-generated method stub
  tags.pop();
 }

 @Override
 public void startElement(String uri,String localName,String qName,Attributes attrs)  throws SAXException {
  // TODO Auto-generated method stub
  tags.push(qName);
 }
}

 运行结果如下:

name=Tom
age=20
skill=java
name=Mike
age=23
skill=.net

分享到:
评论

相关推荐

    java 解析xml 多级

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

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xml

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析...java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在

    Java解析xml所需jar包

    在这个场景中,提到的两个关键库是`dom4j`和`jdom`,它们都是Java解析XML的重要工具。 **dom4j** dom4j是一个非常灵活且功能丰富的Java XML API,它提供了对DOM(文档对象模型),SAX(简单API for XML)和JDOM的...

    java xml解析工具类 java xml解析工具类

    java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析...

    java解析xml例子

    本篇文章将深入探讨如何在Java中解析XML,以帮助你理解和实践相关知识。 一、DOM解析器 DOM(Document Object Model)解析器是Java中的一种常用方法,它将整个XML文档加载到内存中,形成一个树形结构。以下是一个...

    一个Java 解析XML的例子

    总结起来,Java解析XML时,DOM4J是一个强大而灵活的工具。它简化了XML文档的处理,允许开发者高效地读取、创建和修改XML内容。通过理解和应用DOM4J,你可以更好地利用XML在各种场景下的数据交换功能,如配置文件、...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    Java中解析Xml所系jar包集合

    为了在Java中解析XML文档,开发者通常需要依赖特定的库或jar包。以下是对标题和描述中提到的Java XML解析jar包的详细解释: 1. **dom4j-1.6.1.jar**: DOM4J是一个非常灵活的Java XML API,它提供了对DOM、SAX和...

    JAVA JAXB 解析XML嵌套子节点为字符串

    使用JAXB解析XML时,我们首先需要创建一个Java类模型,这个模型反映了XML文档的结构。每个XML元素对应一个Java类,类的属性对应元素的属性或子元素。例如,如果XML中有以下结构: ```xml &lt;text&gt;Some text here ...

    这是一个dom4j的jar包,主要用于在java中解析xml文件。

    5. **事件处理**:通过使用DOM4J的事件模型,开发者可以在解析XML时触发自定义的事件处理器,如元素开始、结束事件,这在处理大量数据时非常有用。 6. **XML Schema支持**:DOM4J还支持XML Schema,可以验证XML文档...

    java 解析xml获取节点内容

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

    解析xml文件需要的jar包

    描述中提到“java解析xml时需要导入源文件都包含在这里”,这暗示了压缩包可能包含了解析XML所需的Java库的JAR文件。通常,解析XML可能需要如`jaxp-1.3.jar`(Java API for XML Processing)、`xml-apis.jar`(XML ...

    java解析xml字符串

    ### Java解析XML字符串 在给定的代码示例中,我们看到了如何使用JDOM库来解析一个XML字符串,并对其进行操作。下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这...

    JAVA调用webservice并解析xml

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

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    java xml 解析 源代码

    本教程将深入讲解如何在Java中解析XML文件,同时提供源代码示例,帮助你理解并应用这些概念。 XML文件的解析主要有两种方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器会将整个XML文档...

    java_dom解析xml xml java

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

    java解析XML文件

    Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种可扩展标记语言,常用于数据交换、配置存储等场景。在Java中,有多种方式可以解析XML文件,主要包括DOM(Document Object ...

Global site tag (gtag.js) - Google Analytics