java解析xml并把节点值存储到数据库中

时间:2021-04-04 18:23:19

最近做了一个接口,发送请求的xml字符串得到另一个项目的返回的xml字符串,再进行解析,解析之后把数据存储到数据库中。自己记录下这个过程,以便以后用得到。

返回的xml字符串是这种形式的

<?xml version="1.0" encoding="utf-8"?>

<ROOT>

<HEAD>

<LINES>2</LINES>

</HEAD>

<ITEM>

<A>9200</A>

<B>01101024</B>

<C>2017</C>

<D>利润中心</D>

<E>利润中心名称</E>

</ITEM>

<ITEM>

<A>9300</A>

<B>01101012</B>

<C>2017</C>

<D>利润中心</D>

<E>利润中心名称</E>

</ITEM>

<ROOT>

我需要解析此xml并把各个节点的值放入到javabean中。

首先创建一个实体类fwspsapEntity

public class fwspsapEntity {

String A;//公司代码

String B;//会计凭证编号

String C;

String D;

String E;

//省略settergetter

}

然后进行解析操作,并把值放入到bean中,再把bean放入到map里,返回一个map类型的值,以便后续功能。

public static Map<String, Object> xmlElements(String xmlDoc) {

List list = new ArrayList<String>();

int index = 0;

Map<String, Object> retmap = new HashMap<String, Object>();

// 创建一个新的字符串

StringReader read = new StringReader(xmlDoc);

// 创建新的输入源SAX解析器将使用InputSource对象来确定如何读取XML输入

InputSource source = new InputSource(read);

// 创建一个新的SAXBuilder

SAXBuilder sb = new SAXBuilder();

try {

// 通过输入源构造一个Document

Document doc = sb.build(source);

// 取的根元素

Element root = doc.getRootElement();

 System.out.println(root.getName());//输出根元素的名称(测试)

// 得到根元素所有子元素的集合

List jiedian = root.getChildren();

Element et = null;

Element et1 = null;

et1 = (Element)jiedian.get(0);

int lines = Integer.parseInt(et1.getChildText("LINES"));

System.out.println(lines);

for(int i=1;i<jiedian.size();i++){

et = (Element) jiedian.get(i);

String A= et.getChildText("A");

String B= et.getChildText("B");

String C = et.getChildText("C");

String D = et.getChildText("D");

String E = et.getChildText("E");

fwspsapEntity entity = new fwspsapEntity();

entity.setA(A);

entity.setB(B);

entity.setC(C);

entity.setD(D);

entity.setE(E);

index++;

retmap.put(index+"",entity);

}

} catch (JDOMException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return retmap;

}

//这一段代码是得到上面的方法返回的map,得到map里面的实体,实体有一个或多个,然后//循环得到实体的数据,进行插入表操作

map = xmlElements(out_str);

if(map!=null){

Set<String> finkey = map.keySet();

String operSql = "";

for (Iterator it = finkey.iterator(); it.hasNext();){

String s = (String) it.next();

if (map.get(s) != null){

fwspsapEntity entity = (fwspsapEntity) map.get(s);

operSql = "insert into my_table(A,B,C,D,E)"

+ "values('"

+entity.getA()+"','"

+entity.getB()+"',"

+entity.getC()+",'"

+entity.getD()+"','"

+entity.getE()+"'

+")";

System.out.println(operSql);

//数据库操作

Connection conn = DbcpUtil.getConnection();

        Statement stat = null;

        PreparedStatement ps = null;

        try{

         conn.setAutoCommit(false);

            stat = conn.createStatement();

            ps = conn.prepareStatement(operSql);

            ps.execute();

            conn.commit();

        }catch(Exception e){

            e.printStackTrace();

        }finally{

         try {

ps.close();

DbcpUtil.close(conn);

} catch (SQLException e) {

e.printStackTrace();

}

        }

}

}

}



数据库的用户名和密码等是放在一个properties文件里的,通过ResourceBundle获取用户名密码等

 dbInfo.properties:

orcl_driver=oracle.jdbc.OracleDriver

orcl_url=jdbc:oracle:thin:@localhost:1521:orcl

username=name

pwd=123456


PropertiesUtil.java:

import java.util.ResourceBundle;

public class PropertiesUnit {

public static ResourceBundle getResourceBundle(){

ResourceBundle retrb = ResourceBundle.getBundle("com.zl.util.dbInfo");

return retrb;

}

}


DbcpUtil.java:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.ResourceBundle;

public class DbcpUtil {

static ResourceBundle rb = PropertiesUnit.getResourceBundle();

static String url =rb.getString("orcl_url");

static String username =rb.getString("username");

static String password =rb.getString("pwd");

static String driver = rb.getString("orcl_driver");

public static Connection getConnection(){

Connection conn = null;

try{

Class.forName(driver);

conn = DriverManager.getConnection(url,username,password);

}catch(Exception e){

e.printStackTrace();

}

return conn;

}

public static void close(Connection conn){

if(conn!=null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) throws Exception {

System.out.println(getConnection());

}

}