SAX解析XML例子

import java.io.FileReader; 
import java.sql.Connection; 
import java.sql.Statement; 
import java.util.HashMap; 
import java.util.Iterator; 
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; 
import com.util.DBConnection; 
import com.util.FileLog; 

/** 
* 功能:解析xml文件,并导入数据库中 
* @author zhangjl 

*/ 
public class ParseXML extends DefaultHandler{ 

/* 
  * 存贮一行信息 
  */ 
private HashMap<String, String> column = new HashMap<String, String>(); 
/* 
  * 当前节点名称 
  */ 
private String currentName = null; 
/* 
  * 当前节点值 
  */ 
private StringBuffer currentValue = new StringBuffer(); 


private  Connection cn = null; 

public void startDocument () throws SAXException 
    { 
  try { 
   cn = DBConnection.getConnection("debt"); 
  } catch (Exception e) { 
   FileLog.writeLog(e); 
  } 
    } 
/** 
  * 元素开始 
  */ 
public void startElement( String namespaceURI, 
   String localName, 
   String qName, Attributes attr ) 
throws SAXException { 
  currentValue.delete(0, currentValue.length());  
  if (qName.equals("tb_app_upgwrunlog")||qName.equals("column")) { 
  } else { 
   currentName = qName; 
  } 


/*** 
  * 获得中间内容 
  */ 
public void characters( char[] ch, int start, int length ) 
throws SAXException { 
   currentValue.append(new String(ch, start, length));  


/** 
  * 元素结束 
  */ 
public void endElement( String namespaceURI, 
   String localName, String qName ) 
throws SAXException { 
   if (qName.equals("tb_app_upgwrunlog")||qName.equals("column")) { 
   } else { 
    if (!currentValue.equals("null")){ 
      column.put(currentName, currentValue.toString());  
    } 
   } 
   if (qName.equals("column")) { 
    try { 
     insert(column); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     closeConnection(); 
    } 
    column.clear(); 
   } 
   
   



  public void endDocument () throws SAXException 
     { 
   closeConnection(); 
     } 
   
  private void closeConnection() { 
   try { 
    if (cn != null){ 
     cn.close(); 
    } 
   } catch (Exception e) { 
   FileLog.writeLog(e); 
   } 
  } 

/** 
  * 建解析xml工厂 
  * @param path 
  */ 
public void parseXMLContent(String path) throws Exception  { 
  try { 
   /*SAXParserFactory factory = SAXParserFactory.newInstance(); 
   SAXParser parser = factory.newSAXParser(); 
   parser.parse(new File(path), new ParseXML());*/ 
   XMLReader xr = XMLReaderFactory.createXMLReader (); 
   xr.setContentHandler( new ParseXML() ); 
   xr.parse(new InputSource(new FileReader(path))); 
} catch (Exception e) { 
  throw e; 




private void insert(HashMap<String, String> columns) throws Exception { 
  String SQL = "insert into tb_app_upgwrunlog("; 
  StringBuffer col_name = new StringBuffer(); 
  StringBuffer col_value = new StringBuffer(); 
  Statement st = cn.createStatement(); 
  Iterator<String> iterator= column.keySet().iterator(); 
  while (iterator.hasNext()) { 
   String key = iterator.next(); 
   col_name = col_name.append(key + ","); 
   col_value = col_value.append("'" + column.get(key) + "',"); 
  } 
  SQL = SQL + col_name + "ul_checkflag,ul_import_time) values(" + col_value + "0,getDate())"; 
  st.execute(SQL); 
  st.close(); 

  public static void main(String args[]) { 
  ParseXML xml = new ParseXML(); 
  try { 
   xml.parseXMLContent("E:/UnionpayBedt/tb_app_upgwrunlog.xml"); 
  } catch (Exception e) { 
   
   e.printStackTrace(); 
  } 




注意: 
characters方法有一句话:“ SAX 规范没有要求处理器以任何特定方式返回字符,因此在多个部分中返回单个文本块是可能的。在假设您有某个元素的所有内容之前,始终要确保 endElement 事件已经发生 ”,所以在characters方法中采取.append的方式,直到endElement时才将值放到HashMap中,还要记得清除currentValue中的值哦. 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值