`
gcgmh
  • 浏览: 354980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xml文件解析之sax解析

阅读更多
package org.itfuture.netoa.admin;

  import java.io.FileInputStream;
  import java.io.FileReader;

  import org.xml.sax.*;
  import org.xml.sax.InputSource;
  import org.xml.sax.XMLReader;//解析器
  import org.xml.sax.helpers.DefaultHandler; //确省的拦截句柄 
  import org.xml.sax.helpers.XMLReaderFactory;
  import java.io.InputStreamReader;

  
  
 //该类来充当拦截器 
public class SAXSampleO1 extends DefaultHandler {
	
	public SAXSampleO1() {
		
	}
	
    //该方法负责拦截starDocument相应解析事件
	public void startDocument() throws SAXException 
	{
		System.out.println("[开始xml解析:]");
	}
	
	public void startElement(String namespaceUri, String ename, String qname, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		System.out.println("[解析的元素为:]"+ename);
		if(ename.equals("account")){
			for(int i=0;i<attributes.getLength();i++)
			{
				String name=attributes.getLocalName(i);
				String value=attributes.getValue(i);
				
				System.out.println("该元素的属性:"+name+"---"+value);
			}
			
			
//			String type=attributes.getValue("type");
//			String number=attributes.getValue("number");
//			System.out.println("该元素的属性:type-"+type+":number-"+number);
		}
		
		
	}
	
	public void characters(char[] chars, int start, int length) throws SAXException 
	{
	    String value= new String(chars,start,length);
	    System.out.println(value);
	}


	public void endElement(String namespaceUri, String ename, String qname) throws SAXException {
		// TODO Auto-generated method stub
		System.out.println("[解析的元素结束:]"+ename);
	}


	
	public void endDocument() throws SAXException {
		System.out.println("[结束xml文档解析]");
	}
    
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
	
		 try {
			XMLReader parser=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
			parser.setContentHandler(new SAXSampleO1());;
		    //InputSource a=;
		    //parser.parse("D:/database.xml");
		    parser.parse(new InputSource(new FileReader("D:/database.xml")));
		    //parser.parse(new InputSource(new FileInputStream("D:/database.xml")));
		}catch(SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}

	}

}


package org.itfuture.netoa.admin;

import java.io.FileInputStream;
import java.io.FileReader;

import org.xml.sax.*;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;//解析器
import org.xml.sax.helpers.DefaultHandler; //确省的拦截句柄 
import org.xml.sax.helpers.XMLReaderFactory;
import java.io.InputStreamReader;



//该类来充当拦截器 
public class SAXSample02 extends DefaultHandler {
	DBInfo info=null;
	//StringBuffer sb=new StringBuffer();//用来存读到相应元素的值
	String str="";
	public SAXSample02() 
	{
		info=new DBInfo();
	}
	
  //该方法负责拦截starDocument相应解析事件
	public void startDocument() throws SAXException 
	{
		System.out.println("[开始xml解析:]");
	}
	
	public void startElement(String namespaceUri, String ename, String qname, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		System.out.println("[解析的元素为:]"+ename);
		if(ename.equals("account"))
		{
			for(int i=0;i<attributes.getLength();i++)
			{
				
				String name=attributes.getLocalName(i);
				String value=attributes.getValue(i);
				if(name.equals("type"))
				  info.setType(value);
				if(name.equals("number"))
				  info.setNumber(Integer.parseInt(value));
				System.out.println("该元素的属性:"+name+"---"+value);
			}	
		}
	    //sb.delete(0,sb.length());
	    str="";
	}
	
	public void characters(char[] chars, int start, int length) throws SAXException 
	{
	    String value= new String(chars,start,length);
	    System.out.println(value);
	    //sb.append(chars,start,length); 
	    str=new String(chars,start,length);
	}


	public void endElement(String namespaceUri, String ename, String qname) throws SAXException 
	{
		// TODO Auto-generated method stub
		System.out.println("[解析的元素结束:]"+ename);
		if(ename.equals("username"))
		{
		   //info.setUsername(sb.toString());	
		   info.setUsername(str);	
		}else if(ename.equals("password")){
		   //info.setPassword(sb.toString());
		   info.setPassword(str);
		}else if(ename.equals("url")){
		   //info.setUrl(sb.toString());	
		   info.setUrl(str);	
		}else if(ename.equals("driver")){
		   //info.setDriver(sb.toString());	
		   info.setDriver(str);	
		}
	}


	
	public void endDocument() throws SAXException {
		System.out.println("[结束xml文档解析]");
	}
  
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
	
		 try {
			SAXSample02 sample= new SAXSample02();
			XMLReader parser=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
			parser.setContentHandler(sample);;
		    //InputSource a=;
		    //parser.parse("D:/database.xml");
		    parser.parse(new InputSource(new FileReader("D:/database.xml")));
		    //parser.parse(new InputSource(new FileInputStream("D:/database.xml")));
            DBInfo info=sample.info;
            System.out.println(info.getType()+"--"+info.getNumber()+"---"+info.getUsername()+"---"+info.getPassword()+"--"+info.getUrl()+"---"+info.getDriver());
		}catch(SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}

	}

}


package org.itfuture.netoa.admin;
   
 import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

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

   
public class SAXSample03 extends DefaultHandler{
	List list=new ArrayList();
	StringBuffer sb=new StringBuffer();
    Customer cust=null;
	
	public SAXSample03() 
	{
		super();
		// TODO Auto-generated constructor stub
	}
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
	}
	
	public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
		// TODO Auto-generated method stub
	    if(arg1.equals("customer"))
	    {
	       cust=new Customer();	
	       list.add(cust); 
	    }
		sb.delete(0,sb.length());
	}
	
	public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
		// TODO Auto-generated method stub
	   sb.append(arg0,arg1,arg2);
	}

	public void endElement(String arg0, String arg1, String arg2) throws SAXException {
		// TODO Auto-generated method stub
	 if(arg1.equals("FirstName"))
	 {	
	    cust.setFirstname(sb.toString());	 
	 }else if(arg2.equals("LastName")){
		cust.setLasetname(sb.toString());
	 }else if(arg2.equals("CustId")){
        cust.setCustid(sb.toString()); 
	 }
	}

	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
	}
	

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		try {
			XMLReader xr=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
		    SAXSample03 sample=new SAXSample03();
		    xr.setContentHandler(sample);
		    xr.parse(new InputSource(new FileInputStream("D:/Example3.xml")));
		    List list=sample.list;
		    for(int i=0;i<list.size();i++)
		    {
		      Customer one=	(Customer)list.get(i);
		      System.out.println(one.getCustid()+"---"+one.getFirstname()+"---"+one.getLasetname());
		    }
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(Exception e){
			 e.printStackTrace();
		}
		

	}

}

package org.itfuture.netoa.admin;

import java.io.CharArrayWriter;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

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

public class SAXSample04 extends DefaultHandler {
    private List custlist=new ArrayList();
	private List orderlist=new ArrayList();
	StringBuffer sb=new StringBuffer();
	CharArrayWriter caw=new CharArrayWriter();
	Customer cust=null;
	OrderItem item=null;
	
	
	
	public SAXSample04() {
		super();
		// TODO Auto-generated constructor stub
	}

	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
	}

	public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
		if(arg1.equals("Customer"))
		{
		   cust=new Customer();
		   custlist.add(cust);
		}else if(arg1.equals("OrderItem")){
		   item=new OrderItem();
		   item.setCustid(cust.getCustid());
		   orderlist.add(item);
		}
		//sb.delete(0,sb.length());
		caw.reset();
		
	}
	public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
	   //sb.append(arg0,arg1,arg2);
		caw.write(arg0,arg1,arg2);
	}

	public void endElement(String arg0, String arg1, String arg2) throws SAXException {
		if(arg1.equals("FirstName")){
			cust.setFirstname(caw.toString());
			//cust.setFirstname(sb.toString());
		}else if(arg1.equals("LastName")){
			//cust.setLasetname(sb.toString());
			cust.setLasetname(caw.toString());
		}else if(arg1.equals("CustId")){
			//cust.setCustid(sb.toString());
			cust.setCustid(caw.toString());
		}
		if(arg1.equals("ProductCode")){
			item.setProductcode(caw.toString());
			//item.setProductcode(sb.toString());
		}else if(arg1.equals("Quantity")){
			item.setQuantity(Integer.parseInt(caw.toString().trim()));
			//item.setQuantity(Integer.parseInt(sb.toString().trim()));
		}else if(arg1.equals("Price")){
			item.setPrice(Double.parseDouble(caw.toString().trim()));
			//item.setPrice(Double.parseDouble(sb.toString().trim()));
		}else if(arg1.equals("Description")){
			item.setDescription(caw.toString());
			//item.setDescription(sb.toString());
			
		}
		
		
	}
	
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception 
	{
	  SAXSample04 sample=new SAXSample04();
      XMLReader parse=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
      parse.setContentHandler(sample);
      parse.parse(new InputSource(new FileReader("D:/Example4.xml")));
      List custlist=sample.custlist;
      List orderlist=sample.orderlist;
      for(int i=0;i<custlist.size();i++)
      {
    	 Customer cust=(Customer)custlist.get(i); 
    	 cust.print(System.out);
      }
      for(int i=0;i<orderlist.size();i++)
      {
    	  OrderItem  item=(OrderItem)orderlist.get(i);
          item.print(System.out);
      }
	}

}

分享到:
评论

相关推荐

    SAX解析XML文件实例

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

    Sax解析XML文件解析

    SAX(Simple API for XML)是XML解析的一种方法,它以事件驱动的方式处理XML文档,非常适合处理大体积的XML文件,因为它不需要一次性加载整个文件到内存,而是逐行读取,因此节省了资源。 **SAX解析XML的基本原理:...

    XML解析之SAX解析DEMO

    SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取,当遇到XML文档中的特定事件(如开始元素、结束元素、字符数据等)时,会触发相应的回调函数。这种解析方式适用于处理大型...

    xml文件解析SAX

    SAX(Simple API for XML)是XML解析的一种方式,它以事件驱动的方式处理XML文档,适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存中。 在SAX解析中,XML文档被读取一次,遇到特定的元素、属性或其他...

    sax解析xml文件

    SAX(Simple API for XML)是一种轻量级的XML解析技术,主要用于读取XML文档。相较于DOM(Document Object Model)解析器,SAX解析器占用更少的内存和处理时间,因为它不会一次性加载整个XML文档到内存,而是采用...

    Java SAX解析Xml文档Demo

    Java SAX(Simple API for XML)解析器是一种基于事件驱动的XML解析方式,它不将整个XML文档加载到内存中,而是逐行读取,当遇到某个事件(如开始标签、结束标签等)时,会触发相应的事件处理器方法。这种方式节省了...

    android xml文件解析 SAX

    SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...

    SAX解析超大XML文件 示例代码

    标签“SAX XML 超大文件”提示我们关注的是XML解析效率和内存管理。使用SAX解析器可以避免一次性加载整个XML文件,有效解决内存限制问题。在处理大型XML文件时,SAX解析是首选方法,因为它提供了良好的性能和资源...

    Sax解析xml文件

    在Android和Java编程中,处理XML文件是常见的任务,而SAX(Simple API for XML)是一种轻量级、事件驱动的XML解析器,它以流式方式读取XML文档,只在需要时解析内容,因此非常适合处理大体积的XML文件。 SAX解析器...

    Android XML解析之SAX解析

    SAX解析器逐行读取XML文档,当遇到开始标签、结束标签、文本内容等元素时,会触发相应的回调函数,开发者可以在这些回调函数中处理数据。这种方式节省了内存,因为不需要一次性加载整个XML到内存中。 下面我们将...

    dom解析和sax解析

    相比之下,SAX解析采用了事件驱动的方式,它不是将整个XML文档加载到内存中,而是逐行扫描XML文件,遇到元素开始、结束、属性等事件时触发相应的回调函数。例如,对于上述XML,SAX解析器会依次调用startElement、...

    sax解析xml本地读取xml

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...

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

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

    Servlet利用SAX解析XML文档

    对于小型XML文档,DOM解析可能是更简单的选择,但对于大型XML文件,SAX解析则是更好的解决方案。 在实际应用中,你可能还需要考虑错误处理,例如,处理XML格式错误或网络问题。同时,为了提高代码可读性和可维护性...

    dom和sax对xml的解析

    本篇文章将详细介绍DOM和SAX解析XML的方法,并通过提供的`DomDemo.java`和`SaxDemo.java`示例代码进行阐述。 1. DOM解析: DOM是一种将整个XML文档加载到内存中,构建一个树形结构的解析方式。这种方式允许开发者...

    XML解析实践之DOM解析和SAX解析.rar

    SAX解析则是一种事件驱动的解析方式,它不将整个XML文档加载到内存中,而是逐行读取文件,遇到元素开始、结束、属性等事件时触发相应的回调函数。这种方式节省了内存,适合处理大型XML文件,但缺点是不能像DOM那样...

    XML文件c语言 dom和sax模式解析

    总结来说,C语言中的XML解析涉及到DOM和SAX两种模式,DOM适合小到中型XML文件,提供方便的数据访问和修改;SAX则适合大型XML文件,以节省内存。Xerces-C++库为这两种解析方式提供了强大的支持,通过注册事件处理器或...

    xml解析文件的两种方式

    - 不支持随机访问:SAX解析器不提供直接访问XML文档任意位置的功能,必须按照顺序处理。 **应用场景** - **DOM** 更适合于需要频繁查询和修改XML文档,且文件大小适中的情况。 - **SAX** 则适用于处理大型XML文件...

    SAX对xml文档进行解析

    这种方式使得解析器不需要一次性加载整个XML文档到内存,因此对于大文件,SAX解析具有高效、低内存占用的特点。 SAX解析的基本步骤如下: 1. 创建解析器:首先,我们需要创建一个SAX解析器实例。在Java中,可以...

Global site tag (gtag.js) - Google Analytics