`
java从入门到放弃
  • 浏览: 44960 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java是怎么操作xml的-sax解析

阅读更多

我们了解完最简单的dom解析之后,马上就可以学习sax解析,先上今天的道具:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<people><name type="english">linbulu</name><sex>boy</sex><age>18</age></people>

 

好,我们今天要做的就是把这个people解析出来,存进一个map里边。废话少说了,马上开干!!

public class TestSax  {
	
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        parser.parse(new File("D:\\fileDemo\\user.xml"), new MyHandler());
	}
	
}

class MyHandler extends DefaultHandler
{
	String currentNodeName=null;
	Map<String, String> map=null;

    @Override
    public void startDocument() throws SAXException
    {
    	System.out.println("1------startDocument------1");
    	map=new HashMap<String, String>();
    }
    
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException
    {
    	    System.out.println("2------startElement--------2----"+qName);
    	    currentNodeName=qName;  //正在解析的元素
    		for(int i=0;i<attributes.getLength();i++){
    		map.put(attributes.getQName(i), attributes.getValue(i));
    		}
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException
    {
    	 System.out.println("3------characters--------3");
    	 String value=new String(ch,start,length);
    	 map.put(currentNodeName,value);
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException
    {
    	 System.out.println("4------endElement--------4");
    }
    

    @Override
    public void endDocument() throws SAXException
    {
      System.out.println("5------endDocument-------5");
      System.out.println(map.toString());
    }

 

大家跑起来,看看控制台输出啥了??

大家是不是觉得非常简单啊。不过我还是要稍微得说一下:

1、要继承 DefaultHandler

2、一共要重写5个方法

    startDocument:开始解析文档。

    startElement:开始解析节点并且读取节点的属性

    characters:读取节点里的内容

    endElement:结束读取这一个节点

    endDocument:结束文档的解析

其中,解析文档和结束文档都只执行一次,其他的执行多次。大家看懂了吗??

 

然后咱们获取值的方法也是很独特,在第三个步骤中:

   String value=new String(ch,start,length);

 

好了,明天来更加叼的,这些都是小儿科,不过,有一点大家一定要注意,面试的时候经常会考的:

sax解析和dom解析的区别,大家如果只讲实现给人家听,百分之九十就挂了。咱们根据实现,来深究一下他们2个家伙的区别在哪里?

  dom解析是直接把xml一个parse操作,转成了document对象,简单粗暴,不过这样会耗费很多内存的资源。所以,在临床上我们一般只用来读一些配置文件或者比较小的xml文件

  sax解析则是一个节点一个节点得往下读,读到后面的,前面的也就释放掉了,所以不会存在说耗费大量内存一说。所以对大型的xml文件用sax解析就再好不过了。

  你学会了吗??

  

 

    

 

 

0
0
分享到:
评论

相关推荐

    java解析xml数据---sax解析器

    Java解析XML数据主要涉及到...总的来说,SAX解析器是Java处理XML文档的一种高效方式,特别适合处理大文件或资源有限的情况。通过自定义事件处理器,我们可以灵活地解析XML文档中的特定信息,而不必一次性加载整个文档。

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析器的使用,并且提到了使用JDOM和JOM4J这两个Java库来处理XML。 1. **DOM解析**:DOM是一种树型结构,它将整个XML文档加载到内存中...

    读取RSS-SAX解析XML实例(java版)

    标题"读取RSS-SAX解析XML实例(java版)"所涉及的知识点主要集中在两个方面:一是如何读取RSS(Really Simple Syndication)数据,二是使用SAX解析XML文件。 RSS是一种用于发布新闻、博客和其他定期更新内容的格式...

    dom-sax解析XML文件-java

    SAX解析器采用事件驱动的方式,逐行读取XML文件,当遇到元素开始、结束、属性、文本等事件时,会触发相应的回调函数。这种方式内存占用低,适合处理大文件,但操作XML数据不如DOM直观,需要编写事件处理器来处理这些...

    java-SAX解析XML、java正则表达式.

    首先,我们需要导入SAX解析所需的JAR包,通常在Java的标准库中已经包含了`javax.xml.parsers`包。使用SAX解析XML的基本步骤如下: 1. 创建`SAXParserFactory`实例,这是用于创建`SAXParser`的工厂类。 2. 使用`...

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    Java SAX解析Xml文档Demo

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

    Xml-GET-SAX.zip_get2326

    在"Xml-GET-SAX"项目中,你可能会找到一个示例,演示如何使用GET请求获取XML文件,并用SAX解析器处理接收到的数据。这个例子对于初学者来说是一个很好的起点,可以了解HTTP请求与XML解析的基本结合。 总结,本教程...

    jsp操作xml源码,解析器为DOM和SAX

    - 对于SAX解析,我们需要实现org.xml.sax.ContentHandler接口,并使用org.xml.sax.XMLReader和org.xml.sax.InputSource。我们先创建XMLReader,设置ContentHandler,然后读取XML文件。当解析器遇到XML元素时,会调用...

    Android网络之数据解析----SAX方式解析XML数据

    总结,Android网络数据解析中,SAX解析XML是一种高效的处理方式,尤其适用于处理大型或结构复杂的XML数据。通过创建自定义的ContentHandler并监听XML解析事件,开发者可以实现灵活且高效的XML数据处理逻辑。在实际...

    android学习笔记1--SAX解析XML

    ### Android学习笔记1—SAX解析XML #### SAX解析XML概览 在Android开发中,XML文件被广泛用于布局设计、资源定义等场景。而为了处理这些XML文件,开发者需要了解不同的XML解析技术,其中SAX(Simple API for XML)...

    sax解析xml尤其是获取元素的值或者内容

    本文将深入探讨如何使用SAX解析XML并获取元素的值或内容。 首先,SAX解析器以流式方式读取XML文档,当遇到文档的不同部分时,会触发相应的事件,如开始文档、开始元素、结束元素等。开发者可以注册事件处理器来响应...

    java sax 解析xml

    下面将详细介绍Java SAX解析XML的相关知识点。 1. **SAX解析原理**: - SAX解析器读取XML文件,遇到每个元素、属性、文本等,都会触发一个相应的事件。 - 应用程序通过实现SAX解析器的回调接口,定义处理这些事件...

    Sax解析XML文件解析

    SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而解析XML内容。这种方式使得...

    android----xml Sax解析示例

    SAX解析的基本原理是,当解析器读取XML文档时,遇到每个元素、属性或其他XML结构,都会触发一个特定的事件,开发者可以通过实现SAX解析器的事件接口来响应这些事件。这种方式对比DOM解析(将整个XML文档加载到内存中...

    XML-Java解析XM

    在Java中,解析XML的主要方式有两种:SAX(Simple API for XML)和DOM(Document Object Model)。此外,还有一些其他的框架和技术如JAXP、JDOM、DOM4J、JAXB等,它们提供了更高级别的抽象和功能。 ##### 1. SAX:...

    xml.rar_dom操作xml_java 操作 xml_java xml_sax_xml

    - "xml"文件可能是测试用的XML文件,用于演示DOM和SAX解析。 学习和掌握Java操作XML的这两种方法,对于开发人员来说至关重要,尤其是在处理XML数据交换、配置文件或与Web服务交互时。DOM适合小型XML文档和需要频繁...

    XML四种解析方式------DOM SAX JDOM DOM4J

    SAX解析器是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档,而是逐行读取并触发相应的事件,如开始元素、结束元素、字符数据等。这种方式节省了内存,适合处理大型XML文件,但不支持随机访问,且需要...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    本篇文章将重点讲解XML在Java中的解析方式,特别是DOM和SAX解析。 1. DOM解析: DOM(Document Object Model)是W3C推荐的一种处理XML文档的标准模型。它将整个XML文档加载到内存中,构建一个树形结构,允许开发者...

    xml-parser解析

    SAX解析器采用事件驱动的方式工作,它读取XML文档时,遇到每个元素、属性或其他结构时都会触发相应的事件,开发者通过注册事件处理器来响应这些事件,从而实现解析XML的目的。这种方式的优点在于它不需要一次性加载...

Global site tag (gtag.js) - Google Analytics