0 0

java解析大容量的xml,插入mysql数据库问题求解(真的不简单)25

各位你们好,小弟今年刚毕业,学习java不久,到一家小公司上班,boss给我的任务是从xml文件中解析出表名、字段名、以及字段的值,把他插入到mysql相同的表中去,他设计的表呢有个问题,(1)数据库表中字段比我解析的字段多,有些字段我这个xml没有,这好说,不插入就行了,(2)字段比我解析出来的字段少,这就麻烦了,我如何插入数据库呢?哦我用的是jdbc   xml文件目前是40M ,过几天可能会有更大,mysql的表示200多个, 介于问题二  苦恼了好几天不会解决求大神帮忙。再次谢过,我积分不多希望别介意
xml部分信息
<?xml version="1.0" encoding = "gbk"?>
<rdf:RDF xml:base="nari" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cim="http://iec.ch/TC57/2003/CIM-schema-cim10#" xmlns:cimNARI="http://www.naritech.cn/CIM/ext-schema#">
<cim:SubControlArea rdf:ID="209000001">
        <cim:Naming.name>乐平市供电公司</cim:Naming.name>
        <cimNARI:SubControlArea.areaNo>1</cimNARI:SubControlArea.areaNo>
        <cimNARI:SubControlArea.recordApp>2031647</cimNARI:SubControlArea.recordApp>
        <cimNARI:SubControlArea.MemberOf_ControlArea rdf:resource="#209000007"/>
</cim:SubControlArea>
<cim:BaseVoltage rdf:ID="200000003">
        <cimNARI:BaseVoltage.name>110</cimNARI:BaseVoltage.name>
        <cim:BaseVoltage.nominalVoltage>110.000000</cim:BaseVoltage.nominalVoltage>
        <cimNARI:BaseVoltage.nominalI>0.000000</cimNARI:BaseVoltage.nominalI>
        <cimNARI:BaseVoltage.v_exm>132.000000</cimNARI:BaseVoltage.v_exm>
        <cimNARI:BaseVoltage.mva_exm>305.000000</cimNARI:BaseVoltage.mva_exm>
</cim:BaseVoltage>
<cim:Substation rdf:ID="210000048">
        <cim:Naming.name>饶丰变</cim:Naming.name>
        <cim:Naming.aliasName>饶丰变</cim:Naming.aliasName>
        <cimNARI:Substation.substationType rdf:resource="http://www.naritech.cn/CIM/ext-schema#SubstationType.trans"/>
        <cimNARI:Substation.recordApp>2031647</cimNARI:Substation.recordApp>
        <cimNARI:Substation.MaxBaseVoltage rdf:resource="#200000004"/>
        <cim:Substation.MemberOf_SubControlArea rdf:resource="#209000003"/>
</cim:Substation>
<cim:Measurement rdf:ID="03060009610010">
        <cim:Naming.name>马302过流II段</cim:Naming.name>
        <cim:Measurement.MeasurementType rdf:resource="#372000022"/>
        <cimNARI:Measurement.RelaySignal rdf:resource="#306000961"/>
        <cim:Measurement.MemberOf_PSR rdf:resource="#210000065"/>
</cim:Measurement>
<cim:Measurement rdf:ID="03070020190010">
        <cim:Measurement.maxValue>0.000000</cim:Measurement.maxValue>
        <cim:Measurement.minValue>0.000000</cim:Measurement.minValue>
        <cim:Naming.name>茶山变_10kV天鹅一路线线电压BC相    </cim:Naming.name>
        <cim:Measurement.MeasurementType rdf:resource="#372000032"/>
        <cimNARI:Measurement.MeasValue rdf:resource="#307002019"/>
        <cim:Measurement.MemberOf_PSR rdf:resource="#210000083"/>
</cim:Measurement>
</rdf:RDF>


就以第一个节点为例吧,SubControlArea是表名,ID、name、areaNo、recordApp、resource是字段。

java代码(我现在能解析出表名,字段不会弄,会的话给我说下谢谢)

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ly.pconline.com.cn.utils.xml.dom4j;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.ElementHandler;
import org.dom4j.ElementPath;
import org.dom4j.io.SAXReader;

/**
*
* @author liyong
*/
public class XindexReader1 {

    public static int flag = 0;

    public static void main(String[] args) {
        XindexReader1 x = new XindexReader1();
//        x.parseXml();
        x.parseXml2();
    }

    public void parseXml() {
        SAXReader saxReader = new SAXReader();
        InputStream in = null;

        try {
            File file = new File("E:\\work123.xml");
            in = new FileInputStream(file);
            ElementHandler myHandler = new ElementHandler() {
                @Override
                public void onStart(ElementPath ep) {
//                    System.out.println("www");
                }

                @Override
                public void onEnd(ElementPath ep) {
                    Element element = ep.getCurrent(); // 获得当前节点
                    String en = element.getName();
                    System.out.println(en);
                }
            };
            saxReader.addHandler("/RDF", myHandler);
            saxReader.addHandler("/RDF/Substation", myHandler);
//            saxReader.resetHandlers();
            saxReader.read(in);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public void parseXml2() {
        SAXReader saxReader = new SAXReader();
        InputStream in = null;
        try {
            File file = new File("E:\\work123.xml");
            in = new FileInputStream(file);
            Document doc = saxReader.read(in);
            List modelList = doc.selectNodes("//RDF");//以每个model划分
            Iterator its = modelList.iterator();
            int i = 0;
            while (its.hasNext()) {
                Element element = (Element) its.next();
                Iterator it = element.elementIterator();
                while (it.hasNext()) {
                    Element et = (Element) it.next();
                    String key = et.getName();
                    i++;
                    System.out.println(key + ":" + i);
                }


            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                }
            }
        }

    }
}


哦,我大概说下我的苦恼吧,xml解析出来应该是一表为单位,然后从mysl中的表信息去核对,把我解析多的字段去除,然后插入进去。不知道我的思路可否正确
2013年8月24日 14:51

2个答案 按时间排序 按投票排序

0 0

解析带命名空间的xml可以参考:http://zxs19861202.iteye.com/blog/745032,既然是mysql数据库,可以去information_schema.columns表中获取表所有的字段,

select * from information_schema.`COLUMNS` where table_name='hrt_train_main';
,其余的就不用一一说明了吧?

2013年8月25日 13:29
0 0

有就插入,没有就把对应的字段设置为默认值。

2013年8月24日 16:50

相关推荐

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    本教程将介绍如何使用Java解析XML文件,并将解析结果导入MySQL数据库。 首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML...

    java读取xml文件导入到mysql数据库中

    xml文件导入到mysql数据库中,包括文件:ConnectionUtils.java,InsertDT.java,db_mysql.properties,test01.xml,需要的jar包dom4j-1.6.1.jar,mysql-connection-java-3.1.1.3-bin.jar,jaxen-1.1-beta-7.jar

    java 从mysql数据库导出数据生成xml文件

    java 从mysql数据库导出数据生成xml文件,新手来的,不喜勿喷

    java解析xml并导入数据库(dom4j).doc

    Java 解析 XML 并导入数据库(DOM4J) Java 解析 XML 并导入数据库是指使用 Java 语言将 XML 文件解析并将其内容导入到数据库中。下面是使用 DOM4J 库来实现此功能的相关知识点: 一、XML 文件解析 XML...

    JAVA串口助手接收数据并解析数据存入MySQL数据库中

    在本文中,我们将深入探讨如何使用Java开发一个串口助手应用程序,该程序能接收来自串行端口的数据并将其解析后存储到MySQL数据库中。首先,我们需要了解串口通信的基本概念,然后学习Java如何处理串口输入,接着是...

    java使用javacsv读取csv文件 导入Mysql数据库

    在Java编程中,将CSV(逗号分隔值)文件的数据导入到MySQL数据库是一项常见的任务。这个过程涉及几个关键步骤,包括读取CSV文件、解析数据、建立与数据库的连接以及执行SQL插入语句。本篇文章将详细讲解如何使用java...

    java 解析xml类映射数据库 数据库操作 反射机制 源码

    本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...

    mysql数据库自动生成xml文件

    MySQL数据库自动生成XML文件是一项实用的技术,它可以帮助开发者快速地将数据库中的数据转换为XML格式,便于数据交换、存储或进一步处理。这项技术通常结合代码生成工具,如MyBatis的Generator,能够自动化生成DAO...

    C#读取XML文件并写入数据库

    通过创建`XmlReader`实例,我们可以逐个节点遍历XML文件,每次读取一个节点时,解析数据并直接插入数据库。这种方法适用于大文件,防止一次性加载整个文件到内存中。 - 示例代码: ```csharp using (var reader =...

    Java解析XML(XML模拟数据库,控制台版考试系统)

    现在xml在web开发中必不可少,在开发中常常会涉及到对xml文档的解析,这个xml模拟数据库的控制台版考试管理系统使用java对xml文档进行dom解析,可以作为学习xml的一份参考资料,整个项目文件打包下载

    解析wthrcdn.etouch的xml格式天气存入mysql数据库

    例如,网络请求可能失败,XML解析可能出现异常,数据库插入可能会因为数据格式问题而失败。 通过以上步骤,我们可以成功地将`wthrcdn.etouch.cn`的XML天气数据解析并存储到MySQL数据库中。这个过程涉及了HTTP请求、...

    JAVA调用webservice并解析xml

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

    mysql-connector-java-8.0.13.jar mysql数据库驱动下载

    MySQL-Connector-Java是Oracle官方提供的用于Java应用程序连接MySQL数据库的驱动程序,它实现了Java Database Connectivity (JDBC) API,使得Java开发者能够方便地在Java应用中与MySQL数据库进行交互。 在Java开发...

    Java根据实体创建Mysql数据库表

    在Java开发中,将对象模型(实体)映射到关系型数据库如MySQL是常见的需求,这一过程被称为对象关系映射(ORM)。ORM框架允许我们通过编程语言操作数据,而不是直接编写SQL语句,大大提高了开发效率。本资源分享的是...

    Java实现XML导入不同数据库,从数据库导出数据到XML

    在这个场景中,我们探讨的是如何使用Java来实现在XML与不同类型的数据库之间的数据导入和导出,并结合了前台的Ajax技术以实现更流畅的用户体验。 首先,XML(eXtensible Markup Language)是一种用于存储和传输结构...

    kettle动态解析XML文件数据导入Oracle或者其他数据库

    kettle动态解析XML文件数据导入Oracle或者其他数据库 需求背景: 因为客户每天都要通过接口通过ftp上传固定格式的xml的文件,需要每天定时解析指定目录下的指定名称的xml文件导入Oracle和其他的数据库,所以开发了这...

    Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)

    在Java编程中,XML(eXtensible Markup Language)是一种常用的数据交换格式,常用于存储配置信息,包括数据库连接参数。本篇文章将深入探讨如何使用DOM(Document Object Model)和SAX(Simple API for XML)两种...

    日志配置文件log4j.xml以及MySql数据库驱动文件

    本篇文章将深入探讨这两个关键组件:日志配置文件`log4j.xml`和MySQL数据库驱动文件`mysql-connector-java-5.1.39-bin.jar`。 首先,我们来了解`log4j.xml`。Log4j是Apache组织提供的一款开源的日志记录框架,广泛...

Global site tag (gtag.js) - Google Analytics