DomParse

要解析的xml文件:

<?xml version="1.0"  encoding="utf-8" ?>
<!DOCTYPE dblp SYSTEM "dblp.dtd">
<dblp><article mdate="2017-05-11" key="journals/ijtm/LuMW10">
<author>Iuan-Yuan Lu</author>
<author>Chih-Jen Mao</author>
<author>Chun-Hsien Wang</author>
<title>Intrafirm technology and knowledge transfer: a best practice perspective.</title>
<pages>338-356</pages>
<year>2010</year>
<volume>49</volume>
<journal>IJTM</journal>
<number>4</number>
<ee>https://doi.org/10.1504/IJTM.2010.030162</ee>
<url>db/journals/ijtm/ijtm49.html#LuMW10</url>
</article>
........
........
........
</article>
</dblp>

Article实体类:

package sax;

public class Article {
    private String author;
    private String title;
    private String pages;
    private Integer year;
    private Integer volume;
    private String journal;
    private String number;
    private String ee;
    private String url;

    public Article() {
    }

    public Article(String author, String title, String pages, Integer year, Integer volume, String journal, String number, String ee, String url) {
        super();
        this.author = author;
        this.title = title;
        this.pages = pages;
        this.year = year;
        this.volume = volume;
        this.journal = journal;
        this.number = number;
        this.ee = ee;
        this.url = url;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getPages() {
        return pages;
    }

    public void setPages(String pages) {
        this.pages = pages;
    }

    public Integer getYear() {
        return year;
    }

    public void setYear(Integer year) {
        this.year = year;
    }

    public Integer getVolume() {
        return volume;
    }

    public void setVolume(Integer volume) {
        this.volume = volume;
    }

    public String getJournal() {
        return journal;
    }

    public void setJournal(String journal) {
        this.journal = journal;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getEe() {
        return ee;
    }

    public void setEe(String ee) {
        this.ee = ee;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

数据库帮助类:

package sax;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
//数据库工具类
public class DbHelper{
    private static final String URL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=dblp_Info";//

    private static final String USER = "ssh";

    private static final String PASSWORD = "123456";

    private static Connection conn = null;
    private static Statement stmt = null;
    private static DbHelper helper = null;

    static {
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    private DbHelper() throws Exception{
        conn = DriverManager.getConnection(URL,USER,PASSWORD);
        stmt = conn.createStatement();
    }

    public static DbHelper getDbHelper() throws Exception{
        if(helper == null || conn == null || conn.isClosed()){
            helper = new DbHelper();    
        }
        return helper;
    }

    public ResultSet executeQuery(String sql) throws Exception {
        if (stmt != null) {
            return stmt.executeQuery(sql);
        }

        throw new Exception("数据库未正常连接");
    }

    public ResultSet executeQuery(String sql, Object...args) throws Exception {
        if (conn == null || conn.isClosed()) {
            DbHelper.close();
            throw new Exception("数据库未正常连接");
        }
        PreparedStatement ps = conn.prepareStatement(sql);
        int index = 1;
        for (Object arg : args) {
            ps.setObject(index, arg);
            index++;
        }

        return ps.executeQuery();
    }

    public int executeUpdate(String sql) throws Exception {
        if (stmt != null) {
            return stmt.executeUpdate(sql);
        }
        throw new Exception("数据库未正常连接");
    }


    public int executeUpdate(String sql, Object...args) throws Exception {
        if (conn == null || conn.isClosed()) {
            DbHelper.close();
            throw new Exception("数据库未正常连接");
        }
        PreparedStatement ps = conn.prepareStatement(sql);
        int index = 1;
        for (Object arg : args) {
            ps.setObject(index, arg);
            index++;
        }
        return ps.executeUpdate();
    }

    public PreparedStatement prepareStatement(String sql) throws Exception {
        return conn.prepareStatement(sql);
    }
    /**
     * 关闭对象,同时将关闭连接
     */
    public static void close() {
        try {
            if (stmt != null)
                stmt.close();
            if (conn != null) 
                conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            helper = null;
        }
    }
}

自定义MyHandler:

package sax;

import java.util.ArrayList;
import java.util.List;

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

public class MyHandler extends DefaultHandler {
    private List<Article> dblp = new ArrayList<>();  // 信息列表
    private Article article = null;
    private int propertyOrder = 0;  // 1-author, 2-title, 3-pages, 4-year,5-volume,6-journal,7-number,8-ee,9-url

    @Override
    public void startDocument() throws SAXException {
        System.out.println("解析文档开始");
    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("解析文档结束");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (qName.equals("article")) {  //新的article开始
            article = new Article();
            return;
        }
        switch (qName) {

        case "author":  
            propertyOrder = 1;
            break;
        case "title":   
            propertyOrder = 2;
            break;
        case "pages":   
            propertyOrder = 3;
            break;
        case "year":    
            propertyOrder = 4;
            break;
        case "volume":  
            propertyOrder = 5;
            break;
        case "journal": 
            propertyOrder = 6;
            break;
        case "number":  
            propertyOrder = 7;
            break;
        case "ee":  
            propertyOrder = 8;
            break;
        case "url": 
            propertyOrder = 9;
            break;
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if (qName.equals("article")) { //article结束 
            dblp.add(article);
            article = null;
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        String content = new String(ch, start, length);
        switch (propertyOrder) {

        case 1:
            article.setAuthor(content);
            break;
        case 2:
            article.setTitle(content);
            break;
        case 3:
            article.setPages(content);
            break;
        case 4:
            int year = Integer.parseInt(content);
            article.setYear(year);
            break;
        case 5:
            int volume = Integer.parseInt(content);
            article.setVolume(volume);
            break;
        case 6:
            article.setJournal(content);
            break;
        case 7:
            article.setNumber(content);
            break;
        case 8:
            article.setEe(content);
            break;
        case 9:
            article.setUrl(content);
            break;

        }
    }
     List<Article> getDblp() {
        return dblp;
    }

     public void setDblp(List<Article> dblp) {
        this.dblp = dblp;
    }

    public Article getArticle() {
        return article;
    }

    public void setArticle(Article article) {
        this.article = article;
    }
}

测试类:

package sax;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

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

public class SAXParserDemo {

    public static void main(String[] args) throws SQLException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser parser = factory.newSAXParser();//实例化SAXParserFactory对象
            MyHandler handler = new MyHandler(); // 使用自定义的handle
            parser.parse("dblp/dblp.xml", handler);

            try {
                // 连接数据库
                DbHelper dbhelper = DbHelper.getDbHelper();
                // 查询数据库
                String sql = "insert into te(author, title, pages, year, volume, journal, number, ee, url)values(?, ?, ?, ?, ?, ?, ?, ?, ?)";
                List<Article> dblp = handler.getDblp();
                for (int i = 0; i < dblp.size(); i++) {
                    Article article = dblp.get(i);
                    dbhelper.executeUpdate(sql, article.getAuthor(), article.getTitle(), article.getPages(),
                            article.getYear(), article.getVolume(), article.getJournal(), article.getNumber(),
                            article.getEe(), article.getUrl());
                }
                dbhelper.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("done");
        } catch (ParserConfigurationException | SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值