100分求SAX解析XML导入数据库代码,牛人乱入
如题,我的XML文档如下,要将下列字段得到然后导入数据库,我现在自己做主要是时间那个字符串老是取不全,我的代码也附在这里吧,如果代码可用,我再送他100分
<DATA>
<TABLE tableName= "user02 ">
<USERID> 1000000001 </USERID>
<CREATEDATE> 2007-02-11 00:00:00.0 </CREATEDATE>
<CRTBY> 012011 </CRTBY>
<MODIFYDATE> null </MODIFYDATE>
<LSTMODBY> null </LSTMODBY>
<CMT> 0 </CMT>
<CMTUSER> null </CMTUSER>
<CMTDATE> null </CMTDATE>
<APPSTATUS> 0 </APPSTATUS>
<REMARK> 921176 </REMARK>
<ISNEW> 1 </ISNEW>
<LASTUPDATE> 2007-04-28 10:58:00.0 </LASTUPDATE>
</TABLE>
</DATA>
我的代码,其中dbcon是个封装了数据库访问的类,大家不要管它
public class SAXReader extends DefaultHandler{
dbcon connect = new dbcon();
String columnValue = null;
String tableName = null;
String columnName = null;
String sql = "insert into " ;
public void startDocument() throws SAXException {
}
public void processingInstruction(String taget, String data) throws SAXException {
}
public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
if( "TABLE ".equals(qName))
{
for(int i = 0;i <attr.getLength();i++)
{
tableName = attr.getValue(i);
}
sql += tableName + " values( ";
}
else
{
columnName = qName;
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
columnValue=new String(ch,start,length).toString().trim();
if( " ".equals(columnValue))
{
columnValue = " ' ' ";
}
else
{
if(! "null ".equals(columnValue)&&! "NULL ".equals(columnValue)&&columnValue!=null)
{
columnValue = " ' "+ columnValue+ " ' ";
}
}
if(columnName!=null&&columnName.indexOf( "DATE ")> 0)
System.out.println(columnValue);
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if(! "DATA ".equals(qName)&&! "TABLE ".equals(qName))
{
if(! "LASTUPDATE ".equals(columnName))
{
sql += columnValue + ", ";
}
if( "LASTUPDATE ".equals(columnName))
{
sql += columnValue;
}
}
columnName = null;
columnValue = null;
if( "TABLE ".equals(qName))
{
sql += ") ";
System.out.println(sql);
insert(sql);
sql = "insert into ";
}
}
public void endDocument() throws SAXException {
}
public int insert(String sql)
{
int i = 0;
if(connect!=null)
{
i = connect.executeUpdate(sql);
}
return i ;
}
[解决办法]
我是用的JDOM。。。
import java.io.*;
import java.sql.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
public class jiexiXML {
public jiexiXML() {
}
public static void main(String[] args) throws Exception {
jieya.unZIP();
String file= "d:/bbb.xml ";
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver ").newInstance();
String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=IPSNET;selectMethod=cursor; ";
Connection conn = DriverManager.getConnection(url, "sa ", "sa ");
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(new FileInputStream(file));
Element root = doc.getRootElement();
//List list = root.getChildren();
List tzList = root.getChildren( "tz ");
//Element tz = root.getChild( "tz ");
//List tzList = tz.getChildren();
for(int i = 0 ; i < tzList.size() ; i++){
Element item = (Element)tzList.get(i);
//System.out.println(item.getName());
//System.out.println( "item --> " + item.getChildText( "tzid "));
Element tzidEle = item.getChild( "tzid ");
String tzid = tzidEle.getText();
System.out.println( "tzid --> " + tzid);
Element tzbtEle = item.getChild( "tzbt ");
String tzbt = tzbtEle.getText();
System.out.println( "tzbt --> " + tzbt);
Element tznrEle = item.getChild( "tznr ");
String tznr = tznrEle.getText();
System.out.println( "tznr --> " + tznr);
Element ywtzbtEle = item.getChild( "ywtzbt ");
String ywtzbt = ywtzbtEle.getText();
System.out.println( "ywtzbt --> " + ywtzbt);
Element ywtznrEle = item.getChild( "ywtznr ");
String ywtznr = ywtznrEle.getText();
System.out.println( "ywtznr --> " + ywtznr);
}
System.out.println( "\n=============================================================\n ");
Element tzdx = root.getChild( "tzdx ");
List tzdxList = tzdx.getChildren( "record ");
for(int i = 0 ; i < tzdxList.size() ; i++){
Element item = (Element)tzdxList.get(i);
Element idEle = item.getChild( "id ");
String id = idEle.getText();
System.out.println( "id --> " + id);
Element dhEle = item.getChild( "dh ");
String dh = dhEle.getText();
System.out.println( "dh --> " + dh);
Element czEle = item.getChild( "cz ");
String cz = czEle.getText();
System.out.println( "cz --> " + cz);
Element dxEle = item.getChild( "dx ");
String dx = dxEle.getText();
System.out.println( "dx --> " + dx);
Element mailEle = item.getChild( "mail ");
String mail = mailEle.getText();
System.out.println( "mail --> " + mail);
System.out.println( "\n-------------------------------------------------------\n ");
}
/*
* try{
SAXBuilder sb=new SAXBuilder();// 建立构造器
Document doc=sb.build(new FileInputStream(file));// 读入指定文件
Element root=doc.getRootElement();// 获得根结点
List list=root.getChildren();// 将根结点下的所有子节点放入List中
PreparedStatement pstmt=conn.prepareStatement( "insert into t_entinfo(EntRegNo,EntName,LeRep,RegCap,RegDate,BuItem,Country,Province,Tel,Mobile_phone,Email,Address,Fax,HomePage,EntType,Group_ID) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ");
for(int i=0;i <list.size();i++){
System.out.println( "/n-----------------------/n ");
Element item=(Element)list.get(i);// 取得节点实例
Element EntRegNo=item.getChild( "EntRegNo ");// 取得当前节点的子节点
String entRegNo=EntRegNo.getText();// 取得当前节点的值
System.out.println( "EntRegNo----> "+entRegNo);
Element EntName=item.getChild( "EntName ");// 取得当前节点的子节点
String entName=EntName.getText();// 取得当前节点的值
System.out.println( "EntName----> "+entName);
Element LeRep=item.getChild( "LeRep ");// 取得当前节点的子节点
String leRep=LeRep.getText();// 取得当前节点的值
System.out.println( "LeRep----> "+leRep);
Element RegCap=item.getChild( "RegCap ");// 取得当前节点的子节点
Double regCap=new Double(RegCap.getText()).doubleValue();// 取得当前节点的值
System.out.println( "RegCap----> "+regCap);
Element RegDate=item.getChild( "RegDate ");// 取得当前节点的子节点
String regDate=RegDate.getText();// 取得当前节点的值
System.out.println( "RegDate----> "+regDate);
Element BuItem=item.getChild( "BuItem ");// 取得当前节点的子节点
String buItem=BuItem.getText();// 取得当前节点的值
System.out.println( "BuItem----> "+buItem);
Element Country=item.getChild( "Country ");// 取得当前节点的子节点
String country=Country.getText();// 取得当前节点的值
System.out.println( "Country----> "+country);
Element Province=item.getChild( "Province ");// 取得当前节点的子节点
String province=Province.getText();// 取得当前节点的值
System.out.println( "Province----> "+province);
Element Tel=item.getChild( "Tel ");// 取得当前节点的子节点
String tel=Tel.getText();// 取得当前节点的值
System.out.println( "Tel----> "+tel);
Element Mobile_phone=item.getChild( "Mobile_phone ");// 取得当前节点的子节点
String mobile_phone=Mobile_phone.getText();// 取得当前节点的值
System.out.println( "Mobile_phone----> "+mobile_phone);
Element Email=item.getChild( "Email ");// 取得当前节点的子节点
String email=Email.getText();// 取得当前节点的值
System.out.println( "Email----> "+email);
Element Address=item.getChild( "Address ");// 取得当前节点的子节点
String address=Address.getText();// 取得当前节点的值
System.out.println( "Address----> "+address);
Element Fax=item.getChild( "Fax ");// 取得当前节点的子节点
String fax=Fax.getText();// 取得当前节点的值
System.out.println( "Fax----> "+fax);
Element HomePage=item.getChild( "HomePage ");// 取得当前节点的子节点
String homePage=HomePage.getText();// 取得当前节点的值
System.out.println( "HomePage----> "+homePage);
Element EntType=item.getChild( "EntType ");// 取得当前节点的子节点
int entType=new Integer(EntType.getText()).intValue();// 取得当前节点的值
System.out.println( "EntType----> "+entType);
Element Group_ID=item.getChild( "Group_ID ");// 取得当前节点的子节点
int group_ID=new Integer(Group_ID.getText()).intValue();// 取得当前节点的值
System.out.println( "Group_ID----> "+group_ID);
if(conn!=null){
try{
pstmt.setString(1,entRegNo);
pstmt.setString(2,entName);
pstmt.setString(3,leRep);
pstmt.setDouble(4,regCap);
pstmt.setString(5,regDate);
pstmt.setString(6,buItem);
pstmt.setString(7,country);
pstmt.setString(8,province);
pstmt.setString(9,tel);
pstmt.setString(10,mobile_phone);
pstmt.setString(11,email);
pstmt.setString(12,address);
pstmt.setString(13,fax);
pstmt.setString(14,homePage);
pstmt.setInt(15,entType);
pstmt.setInt(16,group_ID);
pstmt.executeUpdate();
System.out.println( "XML文件内容已存入数据库... ");
}catch(SQLException e){
throw new SQLException( "Cound not execute SQLquery. "+e.toString());
}catch(Exception e){
throw new Exception( "Cound not execute query. ");
}
}
pstmt.close();
}
}catch(Exception e){
e.getMessage();
}*/
conn.close();
}
}
[解决办法]
试试这个如果对你有帮助再发完整的,(太长了)
——————————————————————————————
/// 间隔符
/// </summary>
public string SpaceChar = " ";
/// <summary>
/// xsd构架文件名称
/// </summary>
public string XMLShemaFileName = " ";
/// <summary>
/// 缩略图
/// </summary>
public System.Drawing.Image Overview;
/// <summary>
/// xml构架信息
/// </summary>
private XmlSchema schema;
/// <summary>
/// 必、选填参数 true的时候 显示选填的项 false的时候只显示必填项
/// </summary>
private bool isOptional = false;
/// <summary>
/// 历史值记录
/// </summary>
public System.Collections.Hashtable MetaValueTable = new System.Collections.Hashtable();
/// <summary>
/// 树的起始节点编号
/// </summary>
private int treeIndex = -1;
/// <summary>
/// 代码表
/// </summary>
private System.Collections.Hashtable CodeList = new System.Collections.Hashtable();
/// <summary>
/// 构造函数
/// </summary>
/// <param name= "xsdfile "> xsd文件地址 </param>
public XmlShema2Tree(string xsdfile)
{
schema = new XmlSchema();
System.IO.FileInfo fileinfo = new FileInfo(xsdfile);
if (!fileinfo.Exists)
{
throw new Exception( "元数据标准的XML Shema信息不存在: " + xsdfile);
}
XMLShemaFileName = fileinfo.Name;
StreamReader sw = new StreamReader(xsdfile, System.Text.Encoding.Default);
schema = XmlSchema.Read(sw, new ValidationEventHandler(SchemaValidationHandler));
sw.Close();
schema.Compile(new ValidationEventHandler(SchemaValidationHandler));
}
/// <summary>
/// 获取DTree生成树的脚本信息
/// </summary>
/// <param name= "isOptional "> 必、选填参数 </param>
/// <returns> </returns>
public string GetDTreeScript(bool optional)
{
this.cbxlist = new System.Collections.Hashtable();
this.isOptional = optional;
this.treeIndex = -1;
this.JsScript = " ";
StringBuilder str = new StringBuilder();
str.AppendLine( " <script language=\ "javascript\ " src=\ "javascript/dtree.js\ " type=\ "text/javascript\ "> </script> ");
str.AppendLine( " <link href=\ "Common/Css/Default.css\ " type=\ "text/css\ " rel=\ "stylesheet\ "> ");
str.AppendLine( " <script language=\ "javascript\ " src=\ "Common/JavaScript/DatePicker.js\ " type=\ "text/javascript\ "> </script> ");
str.AppendLine( " <script type=\ "text/javascript\ "> ");
str.AppendLine( " <!-- ");
str.AppendLine( " var categorytree = new dTree(\ "categorytree\ "); ");
//通过XSD Shema构件数的节点
DecodeSchema(schema, str, -1);
if (JsScript.Length > 0)
{
JsScript = JsScript.TrimEnd( '| ');
JsScript = JsScript.Replace( " ", " ");
}
str.AppendLine( " document.write(categorytree); ");
str.AppendLine( " var vctl = \ " " + JsScript + "\ "; ");
str.AppendLine( " function vv() ");
str.AppendLine( "{ ");
str.AppendLine( "if(vctl && vctl.length > 0) ");
str.AppendLine( "{ ");
str.AppendLine( "var v = vctl.split( '| '); ");
str.AppendLine( "var l = v.length; ");
str.AppendLine( "for(var i=0;i <l;i++) ");
str.AppendLine( "{ ");
str.AppendLine( "var tip = v[i]; ");
str.AppendLine( "i++; ");
str.AppendLine( "var name = v[i]; ");
str.AppendLine( "var ctl = document.getElementById(name); ");
str.AppendLine( "if(ctl && ctl.value == ' ') ");
str.AppendLine( "{ ");
str.AppendLine( "alert( '请填写 ' + tip); ");
str.AppendLine( "ctl.focus(); ");
str.AppendLine( "return false; ");
str.AppendLine( "} ");
str.AppendLine( "} ");
str.AppendLine( "} ");
str.AppendLine( "} ");
str.AppendLine( " --> ");
str.AppendLine( " </script> ");
string html = str.ToString();
foreach (string key in cbxlist.Keys)
{
string ckey = cbxlist[key].ToString();
System.Collections.ArrayList list = CodeList[ckey] as System.Collections.ArrayList;
string v = MetaValueTable.ContainsKey(key) ? MetaValueTable[key].ToString() : " ";
string options = " ";
foreach (string s in list)
{
if (s.Trim() != " ")
{
if (v == s.Trim())
{
options += " <option value=\ " " + s.Trim() + "\ " selected> " + s.Trim() + " </option> ";
}
else
{
options += " <option value=\ " " + s.Trim() + "\ "> " + s.Trim() + " </option> ";
}
}
}
html = html.Replace( "{ " + key + "} ", options);
}
return html;
}
/// <summary>
/// 异常处理
/// </summary>
/// <param name= "sender "> </param>
/// <param name= "args "> </param>
private void SchemaValidationHandler(object sender, ValidationEventArgs args)
{
Console.WriteLine(args.Message);
}
/// <summary>
/// 循环构件节点
/// </summary>
/// <param name= "obj "> XmlSchemaObject </param>
/// <param name= "str "> StringBuilder </param>
/// <param name= "nodeindex "> NodeIndex </param>
/// <returns> </returns>
private int DecodeSchema(XmlSchemaObject obj, StringBuilder str, int nodeindex)
{
int newNodeIndex = nodeindex;
//所有类型
//XmlSchemaAnnotation annot = obj as XmlSchemaAnnotation;
//XmlSchemaAttribute attrib = obj as XmlSchemaAttribute;
//XmlSchemaFacet facet = obj as XmlSchemaFacet;
//XmlSchemaDocumentation doc = obj as XmlSchemaDocumentation;
//XmlSchemaAppInfo appInfo = obj as XmlSchemaAppInfo;
XmlSchemaElement element = obj as XmlSchemaElement;
XmlSchemaSimpleType simpleType = obj as XmlSchemaSimpleType;
XmlSchemaComplexType complexType = obj as XmlSchemaComplexType;
if (element != null)
{
if (element.MinOccurs > 0 || (element.MinOccurs == 0 && isOptional))
{
XmlSchemaSimpleType st = element.SchemaType as XmlSchemaSimpleType;
XmlSchemaComplexType ct = element.SchemaType as XmlSchemaComplexType;
if (st != null || ct != null)
{
//simple || complex type element. Recurse.
CreateTreeNode_STCT(str, element, newNodeIndex, ref treeIndex);
DecodeSchema(element.SchemaType, str, treeIndex);
}
else
{
CreateTreeNode(str, element, newNodeIndex, ref treeIndex);
}
}
}
else if (simpleType != null)
{
XmlSchemaSimpleTypeRestriction rest = simpleType.Content as XmlSchemaSimpleTypeRestriction;
if (rest != null)
{
if (!CodeList.ContainsKey(simpleType.Name))
{
System.Collections.ArrayList list = new System.Collections.ArrayList();
foreach (XmlSchemaFacet schemaObject in rest.Facets)
{
list.Add(schemaObject.Value);
}
[解决办法]
package testxml;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXPrinterTest extends DefaultHandler {
public void startElement(String uri, String localName, String qName,
Attributes attr) throws SAXException {
System.out.print( " < " + qName);
for (int i = 0; i < attr.getLength(); i++) {
System.out.print( " ");
System.out.print(attr.getQName(i));
System.out.print( "=\ " ");
System.out.print(attr.getValue(i));
System.out.print( "\ " ");
}
System.out.print( "> ");
}
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.print(new String(ch, start, length));
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print( " < " + qName + "/> ");
}
public static void main(String args[]) {
SAXParserFactory spf = SAXParserFactory.newInstance();
try {
SAXParser sp = spf.newSAXParser();
sp.parse(new File( "****/***.xml "), new SAXPrinterTest());
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
把****/***.xml改成你自己的路径试试!
[解决办法]
谢谢各位,问题已经解决,散分了~~,多谢楼上这么多热心的朋友,谢谢~~!