从数据库得到数据导出指定格式的xml文件,上传到NC接口,返回回执到本地一个xml文件

来源:互联网 发布:电梯运行优化 编辑:程序博客网 时间:2024/06/05 04:17
1、先把指定格式的本地文件(.xml)导入NC接口,返回一个回执文件(xml文件);
2、从中间库导出指定格式的文件(.xml),在导入到NC接口,返回一个回执文件(.xml);
xml模板格式:
<?xml version="1.0" encoding="gb2312"?><ufinterface roottag="voucher" billtype="gl" replace="Y" receiver="1112" sender="01" isexchange="Y" proc="add" operation="req" filename="d:\2017-9-15_1112\1112_41.xml">    <voucher id="wjy735">        <voucher_head>            <company>1060325</company>            <voucher_type>记账凭证</voucher_type>            <fiscal_year>2017</fiscal_year>            <accounting_period>10</accounting_period>            <voucher_id>0</voucher_id>            <attachment_number>1</attachment_number>            <prepareddate>2017-10-15</prepareddate>            <enter>18031</enter>            <signature>N</signature>            <voucher_making_system>GL</voucher_making_system>            <memo1>735</memo1>            <cmspzid>735</cmspzid>        </voucher_head>        <voucher_body>            <entry>                <entry_id>1</entry_id>                <account_code>100201</account_code>                <abstract>现金存行</abstract>                <currency>CNY</currency>                <unit_price>0</unit_price>                <exchange_rate1>1</exchange_rate1>                <exchange_rate2>1</exchange_rate2>                <debit_quantity>0</debit_quantity>                <primary_debit_amount>20581.70</primary_debit_amount>                <secondary_debit_amount>0</secondary_debit_amount>                <natural_debit_currency>20581.70</natural_debit_currency>                <credit_quantity>0</credit_quantity>                <primary_credit_amount>0</primary_credit_amount>                <secondary_credit_amount>0</secondary_credit_amount>                <natural_credit_currency>0</natural_credit_currency>                <auxiliary_accounting>                    <item name="银行账户">44037001040005592</item>                    <item name="现金流量项目">1111</item>                </auxiliary_accounting>            </entry>            <entry>                <entry_id>2</entry_id>                <account_code>1001</account_code>                <abstract>现金存行</abstract>                <currency>CNY</currency>                <unit_price>0</unit_price>                <exchange_rate1>1</exchange_rate1>                <exchange_rate2>1</exchange_rate2>                <debit_quantity>0</debit_quantity>                <primary_debit_amount>0</primary_debit_amount>                <secondary_debit_amount>0</secondary_debit_amount>                <natural_debit_currency>0</natural_debit_currency>                <credit_quantity>0</credit_quantity>                <primary_credit_amount>20581.70</primary_credit_amount>                <secondary_credit_amount>0</secondary_credit_amount>                <natural_credit_currency>20581.70</natural_credit_currency>                <auxiliary_accounting>                    <item name="现金流量项目">1111</item>                </auxiliary_accounting>            </entry>        </voucher_body>z    </voucher></ufinterface>
注:
一个xml文件中可以包含一个或多个<voucher id="735">
一个<voucher>体中包含一个<voucher_head>和<voucher_body>
一个<voucher_body>体中包含一个或多个<entry>
一个<entry>体中包含一个<auxiliary_accounting>
一个<auxiliary_accounting>体中包含多个<item>
连接数据库导出指定格式的XML代码一:(String)
package com.accord.test;import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.io.DocumentSource;public class ConnDbBackXml {public static void main(String[] args) throws Exception{long a = System.currentTimeMillis();ConnDbBackXml cd = new ConnDbBackXml();String xmlString = cd.connOracleDb();//System.out.println("最终结果:" + xmlString);cd.stringToXml(xmlString);System.out.println(System.currentTimeMillis()-a);}public void stringToXml(String xmlString) throws Exception {Document resDoc = DocumentHelper.parseText(xmlString);// 对回执结果的后续处理/************document转化为xml*************/TransformerFactory tFactory = TransformerFactory.newInstance();  Transformer transformer = tFactory.newTransformer();DocumentSource source = new DocumentSource(resDoc);transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //设置文档的换行与缩进transformer.setOutputProperty(OutputKeys.INDENT, "YES");      //设置日期格式SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss");  String resFile = "E:\\"+fmt.format(new Date())+".xml"; StreamResult result = new StreamResult(new File(resFile)); transformer.transform(source,result); System.out.println("======生成xml文件成功=======");}@SuppressWarnings({ "unchecked", "rawtypes", "unused" })public String connOracleDb() {Connection con = null;// 创建一个数据库连接PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用StatementResultSet rs = null;// 创建一个结果集对象String xmlString = "<?xml version=\"1.0\" encoding=\"gb2312\"?>" + "\t" + "\r\n"  + "<ufinterface roottag=\"voucher\" billtype=\"gl\" replace=\"Y\" receiver=\"1112\" sender=\"01\" isexchange=\"Y\" proc=\"add\" operation=\"req\" filename=\"e:\\1.xml\">" + "\t";try {//// sid:fadb ip:10.10.1.15 user:testjk password:test11jkClass.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序System.out.println("开始尝试连接数据库!");String url = "jdbc:oracle:" + "thin:@10.10.1.15:1521:fadb";// 127.0.0.1是本机地址,XE是精简版Oracle的默认数据库名String user = "testjk";// 用户名,系统默认的账户名String password = "test11jk";// 你安装时选设置的密码con = DriverManager.getConnection(url, user, password);// 获取连接System.out.println("连接成功!");String sql = "select * from nc_ext_fa_ls_pz_doc t where t.company='1125'";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql);// 实例化预编译语句//pre.setString(1, "小茗同学");// 设置参数,前面的1表示参数的索引,而不是表中列名的索引rs = pre.executeQuery();// 执行查询,注意括号中不需要再加参数//System.out.println(result.getRow());//result.last();//int rowCount=result.getRow() ;//System.out.println(rowCount);  "\t\t"List listId = new ArrayList();List listVoucher_Heads = new ArrayList();List listVoucher_Bodys = new ArrayList();String voucher_head = "";while (rs.next()){listId.add(rs.getString("id").toString());voucher_head = "\r\n" + "\t" + "<voucher id=\"" + rs.getString("id") +  "\">"  + "\r\n" + "\t\t";voucher_head = voucher_head + "<voucher_head>" + "\r\n" + "\t\t\t"; //开始voucher_head = voucher_head + "<company>" + rs.getString("company") + "</company>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<voucher_type>" + rs.getString("voucher_type") + "</voucher_type>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<fiscal_year>" + rs.getString("fiscal_year") + "</fiscal_year>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<accounting_period>" + rs.getString("accounting_period") + "</accounting_period>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<voucher_id>" + rs.getString("voucher_id") + "</voucher_id>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<attachment_number>" + rs.getString("attachment_number") + "</attachment_number>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<prepareddate>" + rs.getString("prepareddate") + "</prepareddate>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<enter>" + rs.getString("enter") + "</enter>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<signature>" + rs.getString("signature") + "</signature>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<voucher_making_system>" + rs.getString("voucher_making_system") + "</voucher_making_system>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<memo1>" + rs.getString("memo1") + "</memo1>"  + "\r\n" + "\t\t\t";voucher_head = voucher_head + "<cmspzid>" + rs.getString("id") + "</cmspzid>"  + "\r\n" + "\t\t";voucher_head = voucher_head + "</voucher_head>"  + "\r\n"; //结束listVoucher_Heads.add(voucher_head.toString());}//listId.size()  大小为:主表的记录数,有几个记录就有几个<voucher_head>,遍历for (int i = 0; i < listId.size(); i++) {//System.out.println("从集合里面遍历id:" + listId.get(i));//通过id,从细表中查询结果sql = "select * from nc_ext_fa_ls_pz_dtl t where t.docid= ? order by t.entry_id ";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);// 实例化预编译语句pre.setString(1, listId.get(i).toString());// 设置参数,前面的1表示参数的索引,而不是表中列名的索引rs = pre.executeQuery();// 执行查询,注意括号中不需要再加参数System.out.println("细表开始");List listSourceIds = new ArrayList();String voucher_body = "\t\t" + "<voucher_body>"  + "\r\n" + "\t\t\t";while(rs.next()) {//System.out.println("得到entry_id:" + rs.getString("entry_id"));//voucher_body = "<voucher_body>" + "\t";//String voucher_body = "<voucher_body>" + "\t";voucher_body = voucher_body + "<entry>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<entry_id>" + rs.getString("entry_id") + "</entry_id>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<account_code>" + rs.getString("account_code") + "</account_code>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<abstract>" + rs.getString("abstract") + "</abstract>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<currency>" + rs.getString("currency") + "</currency>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<unit_price>" + rs.getString("unit_price") + "</unit_price>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<exchange_rate1>" + rs.getString("exchange_rate1") + "</exchange_rate1>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<exchange_rate2>" + rs.getString("exchange_rate2") + "</exchange_rate2>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<debit_quantity>" + rs.getString("debit_quantity") + "</debit_quantity>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<primary_debit_amount>" + rs.getString("primary_debit_amount") + "</primary_debit_amount>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<secondary_debit_amount>" + rs.getString("secondary_debit_amount") + "</secondary_debit_amount>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<natural_debit_currency>" + rs.getString("natural_debit_currency") + "</natural_debit_currency>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<credit_quantity>" + rs.getString("credit_quantity") + "</credit_quantity>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<primary_credit_amount>" + rs.getString("primary_credit_amount") + "</primary_credit_amount>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<secondary_credit_amount>" + rs.getString("secondary_credit_amount") + "</secondary_credit_amount>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<natural_credit_currency>" + rs.getString("natural_credit_currency") + "</natural_credit_currency>"  + "\r\n" + "\t\t\t\t";voucher_body = voucher_body + "<auxiliary_accounting>"  + "\r\n";//代办item 开始:String sourceid = rs.getString("sourceid");listSourceIds.add(sourceid);//System.out.println("sourceid:" + sourceid);//Connection con2 = null;// 创建一个数据库连接//PreparedStatement pre2 = null;// 创建预编译语句对象,一般都是用这个而不用Statement//ResultSet rs2 = null;// 创建一个结果集对象String sql2 = "select * from nc_ext_fa_ls_pz_tiny t where t.dtlsourceid = ? ";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql2);// 实例化预编译语句pre.setString(1, rs.getString("sourceid").toString());// 设置参数,前面的1表示参数的索引,而不是表中列名的索引ResultSet rs2 = pre.executeQuery();// 执行查询,注意括号中不需要再加参数while (rs2.next()) {voucher_body = voucher_body + "\t\t\t\t\t" + "<item name=\"" + rs2.getString("name") + "\">" + rs2.getString("code") + "</item>"  + "\r\n";//System.out.println("name:code:" + rs2.getString("name") + rs2.getString("code"));}//代办item 结束:voucher_body = voucher_body + "\t\t\t\t" + "</auxiliary_accounting>"  + "\r\n" + "\t";if(rs.isLast()) {voucher_body = voucher_body + "\t\t" + "</entry>"  + "\r\n" + "\t\t";}else{voucher_body = voucher_body + "\t\t" + "</entry>"  + "\r\n" + "\t\t\t";}//System.out.println("voucher_body:" + voucher_body);}/*for (int j = 0; j < listSourceIds.size(); j++) {sql = "select * from nc_ext_fa_ls_pz_tiny t where t.dtlsourceid = ? ";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql);// 实例化预编译语句pre.setString(1, listSourceIds.get(j).toString());// 设置参数,前面的1表示参数的索引,而不是表中列名的索引rs = pre.executeQuery();// 执行查询,注意括号中不需要再加参数while (rs.next()) {//voucher_body = voucher_body + "<item name=\"" + rs.getString("name") + "\">" + rs.getString("code") + "</item>" + "\t";System.out.println("name:code:" + rs.getString("name") + rs.getString("code"));}}*//*System.out.println("listSourceIds的大小:" + listSourceIds.size());for (int j = 0; j < listSourceIds.size(); j++) {sql = "select * from nc_ext_fa_ls_pz_tiny t where t.dtlsourceid = ? ";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql);// 实例化预编译语句pre.setString(1, listSourceIds.get(j).toString());// 设置参数,前面的1表示参数的索引,而不是表中列名的索引rs = pre.executeQuery();// 执行查询,注意括号中不需要再加参数String items = "" +"\t";System.out.println("sourceIds+:" + listSourceIds.get(j).toString());while (rs.next()) {//voucher_body = voucher_body + "<item name=\"" + rs.getString("name") + "\">" + rs.getString("code") + "</item>" + "\t";items = items + "<item name=\"" + rs.getString("name") + "\">" + rs.getString("code") + "</item>" + "\t";//System.out.println("name:code:" + rs.getString("name") + rs.getString("code"));}System.out.println("items1:" + items);}*///System.out.println("voucher_body:结束前的:" + voucher_body);xmlString = xmlString + (listVoucher_Heads.get(i) + voucher_body + "</voucher_body>"  + "\r\n" + "\t" + "</voucher>");//System.out.println("整合头和体:" + (listVoucher_Heads.get(i) + voucher_body + "\t" + "</voucher_body>" + "\t" + "</voucher>"));System.out.println("细表结束");}xmlString = xmlString + "\r\n" + "</ufinterface>";//System.out.println("xmlString:" + (xmlString + "</ufinterface>"));} catch (Exception e) {e.printStackTrace();} finally {try {// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源// 注意关闭的顺序,最后使用的最先关闭if (rs != null)rs.close();if (pre != null)pre.close();if (con != null)con.close();System.out.println("数据库连接已关闭!");} catch (Exception e) {e.printStackTrace();}}return xmlString;}}
连接数据库导出指定格式的XML代码二:(StringBuffer)
package com.accord.test;import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.io.DocumentSource;public class ConnDbBackXml02 {public static void main(String[] args) throws Exception{long a = System.currentTimeMillis();ConnDbBackXml cd = new ConnDbBackXml();String xmlString = cd.connOracleDb();cd.stringToXml(xmlString);System.out.println(System.currentTimeMillis()-a);}public void stringToXml(String xmlString) throws Exception {Document resDoc = DocumentHelper.parseText(xmlString);// 对回执结果的后续处理/************document转化为xml*************/TransformerFactory tFactory = TransformerFactory.newInstance();  Transformer transformer = tFactory.newTransformer();DocumentSource source = new DocumentSource(resDoc);transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //设置文档的换行与缩进transformer.setOutputProperty(OutputKeys.INDENT, "YES");   //设置日期格式SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss");  String resFile = "E:\\"+fmt.format(new Date())+".xml"; StreamResult result = new StreamResult(new File(resFile)); transformer.transform(source,result); System.out.println("======生成xml文件成功=======");}@SuppressWarnings({ "unchecked", "rawtypes", "unused" })public String connOracleDb() {Connection con = null;// 创建一个数据库连接PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用StatementResultSet rs = null;// 创建一个结果集对象StringBuffer xmlString = new StringBuffer();xmlString.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\t" + "\r\n" + "<ufinterface roottag=\"voucher\" billtype=\"gl\" replace=\"Y\" receiver=\"1112\" sender=\"01\" isexchange=\"Y\" proc=\"add\" operation=\"req\" filename=\"e:\\1.xml\">"  + "\t");try {// sid:fadb ip:10.10.1.15 user:testjk password:test11jkClass.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序System.out.println("开始尝试连接数据库!");String url = "jdbc:oracle:" + "thin:@10.10.1.15:1521:fadb";// 127.0.0.1是本机地址,XE是精简版Oracle的默认数据库名String user = "testjk";// 用户名,系统默认的账户名String password = "test11jk";// 你安装时选设置的密码con = DriverManager.getConnection(url, user, password);// 获取连接System.out.println("连接成功!");String sql = "select * from nc_ext_fa_ls_pz_doc t where t.company='1125'";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql);// 实例化预编译语句rs = pre.executeQuery();// 执行查询,注意括号中不需要再加参数List listId = new ArrayList();List listVoucher_Heads = new ArrayList();List listVoucher_Bodys = new ArrayList();StringBuffer voucher_head = new StringBuffer();while (rs.next()){listId.add(rs.getString("id").toString());voucher_head.append("\r\n" + "\t" + "<voucher id=\"" + rs.getString("id") +  "\">"  + "\r\n" + "\t\t");voucher_head.append("<voucher_head>" + "\r\n" + "\t\t\t"); //开始voucher_head.append("<company>" + rs.getString("company") + "</company>"  + "\r\n" + "\t\t\t");voucher_head.append("<voucher_type>" + rs.getString("voucher_type") + "</voucher_type>"  + "\r\n" + "\t\t\t");voucher_head.append("<fiscal_year>" + rs.getString("fiscal_year") + "</fiscal_year>"  + "\r\n" + "\t\t\t");voucher_head.append("<accounting_period>" + rs.getString("accounting_period") + "</accounting_period>"  + "\r\n" + "\t\t\t");voucher_head.append("<voucher_id>" + rs.getString("voucher_id") + "</voucher_id>"  + "\r\n" + "\t\t\t");voucher_head.append("<attachment_number>" + rs.getString("attachment_number") + "</attachment_number>"  + "\r\n" + "\t\t\t");voucher_head.append("<prepareddate>" + rs.getString("prepareddate") + "</prepareddate>"  + "\r\n" + "\t\t\t");voucher_head.append("<enter>" + rs.getString("enter") + "</enter>"  + "\r\n" + "\t\t\t");voucher_head.append("<signature>" + rs.getString("signature") + "</signature>"  + "\r\n" + "\t\t\t");voucher_head.append("<voucher_making_system>" + rs.getString("voucher_making_system") + "</voucher_making_system>"  + "\r\n" + "\t\t\t");voucher_head.append("<memo1>" + rs.getString("memo1") + "</memo1>"  + "\r\n" + "\t\t\t");voucher_head.append("<cmspzid>" + rs.getString("id") + "</cmspzid>"  + "\r\n" + "\t\t");voucher_head.append("</voucher_head>"  + "\r\n"); //结束listVoucher_Heads.add(voucher_head.toString());}//listId.size()  大小为:主表的记录数,有几个记录就有几个<voucher_head>,遍历for (int i = 0; i < listId.size(); i++) {//通过id,从细表中查询结果sql = "select * from nc_ext_fa_ls_pz_dtl t where t.docid= ? order by t.entry_id ";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);// 实例化预编译语句pre.setString(1, listId.get(i).toString());// 设置参数,前面的1表示参数的索引,而不是表中列名的索引rs = pre.executeQuery();// 执行查询,注意括号中不需要再加参数System.out.println("细表开始");List listSourceIds = new ArrayList();StringBuffer voucher_body = new StringBuffer();voucher_body.append("\t\t" + "<voucher_body>"  + "\r\n" + "\t\t\t");while(rs.next()) {voucher_body.append("<entry>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<entry_id>" + rs.getString("entry_id") + "</entry_id>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<account_code>" + rs.getString("account_code") + "</account_code>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<abstract>" + rs.getString("abstract") + "</abstract>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<currency>" + rs.getString("currency") + "</currency>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<unit_price>" + rs.getString("unit_price") + "</unit_price>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<exchange_rate1>" + rs.getString("exchange_rate1") + "</exchange_rate1>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<exchange_rate2>" + rs.getString("exchange_rate2") + "</exchange_rate2>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<debit_quantity>" + rs.getString("debit_quantity") + "</debit_quantity>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<primary_debit_amount>" + rs.getString("primary_debit_amount") + "</primary_debit_amount>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<secondary_debit_amount>" + rs.getString("secondary_debit_amount") + "</secondary_debit_amount>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<natural_debit_currency>" + rs.getString("natural_debit_currency") + "</natural_debit_currency>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<credit_quantity>" + rs.getString("credit_quantity") + "</credit_quantity>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<primary_credit_amount>" + rs.getString("primary_credit_amount") + "</primary_credit_amount>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<secondary_credit_amount>" + rs.getString("secondary_credit_amount") + "</secondary_credit_amount>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<natural_credit_currency>" + rs.getString("natural_credit_currency") + "</natural_credit_currency>"  + "\r\n" + "\t\t\t\t");voucher_body.append("<auxiliary_accounting>"  + "\r\n");//代办item 开始:String sourceid = rs.getString("sourceid");listSourceIds.add(sourceid);String sql2 = "select * from nc_ext_fa_ls_pz_tiny t where t.dtlsourceid = ? ";// 预编译语句,“?”代表参数pre = con.prepareStatement(sql2);// 实例化预编译语句pre.setString(1, rs.getString("sourceid").toString());// 设置参数,前面的1表示参数的索引,而不是表中列名的索引ResultSet rs2 = pre.executeQuery();// 执行查询,注意括号中不需要再加参数while (rs2.next()) {voucher_body.append("\t\t\t\t\t" + "<item name=\"" + rs2.getString("name") + "\">" + rs2.getString("code") + "</item>"  + "\r\n");}//代办item 结束:voucher_body.append("\t\t\t\t" + "</auxiliary_accounting>"  + "\r\n" + "\t");if(rs.isLast()) {voucher_body.append("\t\t" + "</entry>"  + "\r\n" + "\t\t");}else{voucher_body.append("\t\t" + "</entry>"  + "\r\n" + "\t\t\t");}}xmlString.append(listVoucher_Heads.get(i).toString() + voucher_body.toString() + "</voucher_body>"  + "\r\n" + "\t" + "</voucher>");System.out.println("细表结束");}xmlString.append("\r\n" + "</ufinterface>");} catch (Exception e) {e.printStackTrace();} finally {try {// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源// 注意关闭的顺序,最后使用的最先关闭if (rs != null)rs.close();if (pre != null)pre.close();if (con != null)con.close();System.out.println("数据库连接已关闭!");} catch (Exception e) {e.printStackTrace();}}return xmlString.toString();}}
运行代码一或代码二生成的文件一样:
导出的xml文件如下:
<?xml version="1.0" encoding="UTF-8"?><ufinterface roottag="voucher" billtype="gl" replace="Y" receiver="1112" sender="01" isexchange="Y" proc="add" operation="req" filename="e:\1.xml"><voucher id="w764"><voucher_head><company>1060337</company><voucher_type>记账凭证</voucher_type><fiscal_year>2017</fiscal_year><accounting_period>09</accounting_period><voucher_id>0</voucher_id><attachment_number>1</attachment_number><prepareddate>2017-09-26</prepareddate><enter>15381</enter><signature>N</signature><voucher_making_system>GL</voucher_making_system><memo1>764</memo1><cmspzid>w764</cmspzid></voucher_head><voucher_body><entry><entry_id>1</entry_id><account_code>1221010606</account_code><abstract>见采购付款</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>5920</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>5920</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>2</entry_id><account_code>220202</account_code><abstract>付国药控股广州有限公司贷款,付款申请单号:00109108001170000010</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>106221.78</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>106221.78</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>0</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>0</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>3</entry_id><account_code>100202</account_code><abstract>付国药控股广州有限公司贷款,付款申请单号:00109108001170000010</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>58658.55</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>58658.55</natural_credit_currency><auxiliary_accounting><item name="现金流量项目">1121</item><item name="银行账户">44224701040008206</item><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>4</entry_id><account_code>1221010605</account_code><abstract>见采购付款</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>41643.23</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>41643.23</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry></voucher_body></voucher><voucher id="w1007"><voucher_head><company>1060337</company><voucher_type>记账凭证</voucher_type><fiscal_year>2017</fiscal_year><accounting_period>10</accounting_period><voucher_id>0</voucher_id><attachment_number>1</attachment_number><prepareddate>2017-10-29</prepareddate><enter>15381</enter><signature>N</signature><voucher_making_system>GL</voucher_making_system><memo1>1007</memo1><cmspzid>w1007</cmspzid></voucher_head><voucher_body><entry><entry_id>1</entry_id><account_code>100202</account_code><abstract>付国药控股广州有限公司贷款,付款申请单号:00109108001170000019</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>163163.59</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>163163.59</natural_credit_currency><auxiliary_accounting><item name="现金流量项目">1121</item><item name="银行账户">44224701040008206</item><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>2</entry_id><account_code>220202</account_code><abstract>付国药控股广州有限公司贷款,付款申请单号:00109108001170000019</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>277856.19</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>277856.19</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>0</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>0</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>3</entry_id><account_code>1221010606</account_code><abstract>见采购付款</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>10358</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>10358</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>4</entry_id><account_code>1221010605</account_code><abstract>见采购付款</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>104334.6</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>104334.6</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry></voucher_body></voucher><voucher id="w516"><voucher_head><company>1060337</company><voucher_type>记账凭证</voucher_type><fiscal_year>2017</fiscal_year><accounting_period>07</accounting_period><voucher_id>0</voucher_id><attachment_number>1</attachment_number><prepareddate>2017-07-28</prepareddate><enter>17977</enter><signature>N</signature><voucher_making_system>GL</voucher_making_system><memo1>516</memo1><cmspzid>w516</cmspzid></voucher_head><voucher_body><entry><entry_id>1</entry_id><account_code>220202</account_code><abstract>付国药控股广州有限公司贷款,付款申请单号:00109108001170000005</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>14418.87</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>14418.87</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>0</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>0</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>2</entry_id><account_code>1221010605</account_code><abstract>见采购付款</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>-541.4</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>-541.4</natural_credit_currency><auxiliary_accounting><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry><entry><entry_id>3</entry_id><account_code>100202</account_code><abstract>付国药控股广州有限公司贷款,付款申请单号:00109108001170000005</abstract><currency>CNY</currency><unit_price>0</unit_price><exchange_rate1>1</exchange_rate1><exchange_rate2>1</exchange_rate2><debit_quantity>0</debit_quantity><primary_debit_amount>0</primary_debit_amount><secondary_debit_amount>0</secondary_debit_amount><natural_debit_currency>0</natural_debit_currency><credit_quantity>0</credit_quantity><primary_credit_amount>14960.27</primary_credit_amount><secondary_credit_amount>0</secondary_credit_amount><natural_credit_currency>14960.27</natural_credit_currency><auxiliary_accounting><item name="现金流量项目">1121</item><item name="银行账户">44224701040008206</item><item name="单位分类">01</item><item name="客商辅助核算">1060000</item></auxiliary_accounting></entry></voucher_body></voucher></ufinterface>
上传xml文件到NC接口的代码:
package com.accord.test;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.stream.StreamResult;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.io.DocumentSource;import org.jdom.input.SAXBuilder;public class TestXmlToNcBackXml{public static void main(String[] args) throws Exception {/*// 获取Servlet连接并设置请求的方法  String url = "http://10.10.1.29:80/service/XChangeServlet?account=ufsoft&receiver=1060325";  URL realURL = new URL(url);  HttpURLConnection connection = (HttpURLConnection)realURL.openConnection();  connection.setDoOutput(true);  connection.setRequestProperty("Content-type", "text/xml");  connection.setRequestMethod("POST");      File file = new File("E:\\2.xml");  BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream());  BufferedInputStream input = new BufferedInputStream(new FileInputStream(file));  int length = 0;  System.out.println("长度" + length);  byte[] buffer = new byte[1000];  while ((length = input.read(buffer, 0, 1000)) != -1) {     out.write(buffer, 0, length);  }     input.close();     out.close();         // 从连接的输入流中取得回执信息  *//***************从输入流取得Doc***************//*  InputStream inputStream = connection.getInputStream();     InputStreamReader isr = new InputStreamReader(inputStream);  BufferedReader bufreader = new BufferedReader(isr);  String xmlString = "";  int c;  System.out.println("==================Beging====================");  while ((c = bufreader.read()) != -1) {   System.out.print((char) c);   xmlString += (char) c;  }  input.close();  System.out.println("===================End======================");  System.out.println("內容:" + xmlString);*/  //String url = "http://10.10.1.29:80/service/XChangeServlet?account=ufsoft&receiver=1060325";   String url = "http://10.10.1.29:80/service/XChangeServlet?account=ufsoft&receiver=1060337";  URL realURL = new URL(url);  HttpURLConnection connection = (HttpURLConnection)realURL.openConnection();  connection.setDoOutput(true);  connection.setRequestProperty("Content-type", "text/xml");  connection.setRequestMethod("POST");      File file = new File("E:\\3.xml");  BufferedOutputStream out = new BufferedOutputStream(connection.getOutputStream());  BufferedInputStream input = new BufferedInputStream(new FileInputStream(file));  int length;  byte[] buffer = new byte[1000];  while ((length = input.read(buffer, 0, 1000)) != -1) {     out.write(buffer, 0, length);  }      input.close();      out.close();         // 从连接的输入流中取得回执信息  /***************从输入流取得Doc***************/  InputStream inputStream = connection.getInputStream();     InputStreamReader isr = new InputStreamReader(inputStream);  BufferedReader bufreader = new BufferedReader(isr);  String xmlString = "";  int c;  System.out.println("==================Beging====================");  while ((c = bufreader.read()) != -1) {   System.out.print((char) c);   xmlString += (char) c;  }  input.close();  System.out.println("===================End======================");      System.out.println("----" + xmlString);      Document resDoc = DocumentHelper.parseText(xmlString);        // 对回执结果的后续处理  /************document转化为xml*************/  TransformerFactory tFactory = TransformerFactory.newInstance();    Transformer transformer = tFactory.newTransformer();  DocumentSource source = new DocumentSource(resDoc);  transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");  //设置文档的换行与缩进  transformer.setOutputProperty(OutputKeys.INDENT, "YES");        //设置日期格式  SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmss");  String resFile = "E:\\"+fmt.format(new Date())+".xml";  StreamResult result = new StreamResult(new File(resFile));  transformer.transform(source,result);  System.out.println("======生成回执文件成功=======");        /**************jdom解析XML*****************/  org.jdom.input.SAXBuilder saxReader = new SAXBuilder();  org.jdom.Document document1 = saxReader.build(new File(resFile));  org.jdom.Element root = document1.getRootElement();  //获取根元素,得到导入用友是否成功successful的值,值为Y:成功 N:失败  String resSuc = root.getAttributeValue("successful");  /*List<org.jdom.Element> list = root.getChildren();  for(org.jdom.Element e:list){   System.out.println("-------------------------");   System.out.println("filename---> "+e.getChildText("filename"));   System.out.println("resultcode---> "+e.getChildText("resultcode"));   System.out.println("resultdescription---> "+e.getChildText("resultdescription"));   System.out.println("content--> "+e.getChildText("content"));   System.out.println("--------------------------------------");  }*/ //后面对回执结果做判断,然后改变导入状态就行了if(null != resSuc){    if(resSuc.equals("N")){        System.out.println("导入失败");        }else if(resSuc.equals("Y")){        System.out.println("导入成功");        //接下来的代码,修改状态    }else{        System.out.println("出现未知错误");        }}else{    System.out.println("未找到successful属性");}}}
返回回执xml代码:
<?xml version="1.0" encoding="UTF-8"?><ufinterface billtype="gl" filename="e:\1.xml" isexchange="Y" proc="add" receiver="1060337@1060337-003" replace="Y" roottag="sendresult" sender="01" successful="Y">    <sendresult>        <billpk>        </billpk>        <bdocid>w764</bdocid>        <filename>e:\1.xml</filename>        <resultcode>1</resultcode>        <resultdescription>单据w764开始处理...单据w764处理完毕!</resultdescription>        <content>2017.09-记账凭证-1</content>    </sendresult>    <sendresult>        <billpk>        </billpk>        <bdocid>w1007</bdocid>        <filename>e:\1.xml</filename>        <resultcode>1</resultcode>        <resultdescription>单据w1007开始处理...单据w1007处理完毕!</resultdescription>        <content>2017.10-记账凭证-1</content>    </sendresult>    <sendresult>        <billpk>        </billpk>        <bdocid>w516</bdocid>        <filename>e:\1.xml</filename>        <resultcode>1</resultcode>        <resultdescription>单据w516开始处理...单据w516处理完毕!</resultdescription>        <content>2017.07-记账凭证-50</content>    </sendresult></ufinterface>
注:用到的jar包:dom4j.jar和jdom-1.1.3.jar和ojdbc14.jar

阅读全文
1 0
原创粉丝点击