我這用JAVA生成了XML,但項目要求同時生成XSD,不知如何解決,這請教各位.
貼出生成XML的代碼.
package cn.com.yyhj.ycweb.ebox.sis_test;import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;import org.apache.log4j.*;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;import cn.com.yyhj.ycweb.ebox.util.DatabaseUtil;
import cn.com.yyhj.ycweb.ebox.util.IoUtil;
import cn.com.yyhj.ycweb.ebox.util.MailUtil;
public class Sender {
private static Logger logger = Logger.getLogger(Sender.class); private Parameter p = null;
private Connection conn = null;
private StringBuffer mailMsg = null;
private String materShipmentcode,contShiptCode,codeshipment;
private static SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
private static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");
private static SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.GERMAN);
private static SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMdd");
private static SimpleDateFormat sdf4 = new SimpleDateFormat("dd-MMM-yyyy",Locale.GERMAN); public static void main(String[] args) {
logger.info("Start...");
if (args.length > 0) {
Sender sender = new Sender(args[0]);
} else {
logger.error("Have not set the parameter file for app.");
System.exit(1);
}
} /**
* 構造方法
*
* @param file
* String
*/
public Sender(String file) { try {
this.p = new Parameter(file);
java.util.Date date = new java.util.Date();
String OutDate = p.sdf1.format(date);
conn = DatabaseUtil.createConnection(p.JDBCDriver, p.dbUrl,
p.dbUser, p.dbPassword); if (this.getData(OutDate, conn) == 1) {
logger.info("Success!");
}
} catch (Exception ex) {
logger.error("Failed!", ex);
} finally {
logger.info("End!");
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
logger.error("Closing Connection Failed !", e);
}
}
} /**
* 獲取發送的資料
*
* @return int if return 0, then has not data; if return 1, then has data;
* if return -1, then occurs error
*/
private int getData(String eboxOutDate, Connection conn)
throws SQLException {
Statement stmt1 = null;
Statement stmt2 = null;
ResultSet header_rs = null;
ResultSet matship_rs = null;
try { stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
stmt2 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String sql_header = p.sql_header;
String sql_matship = p.sql_matship;
//logger.debug("sql:" + sql_header);
header_rs = stmt1.executeQuery(sql_header);
matship_rs = stmt2.executeQuery(sql_matship);
if (header_rs.next()) {
header_rs.beforeFirst();
// createXmlFile(p.xml, header_rs,matship_rs, "BIG5");
if (createXmlFile(p.xml, header_rs,matship_rs, "BIG5")==1){
sendMail(p.smtpHost, p.smtpPort, p.from, p.to,
p.dataMailSubject, p.xml, null, "big5");
}else{
return 0;
}
return 1;
} else {
logger.info("沒有需要轉出的資料");
return 0;
}
} catch (Exception e) {
logger.error("創建資料發生錯誤!", e);
return -1;
} finally {
IoUtil.deleteFile(p.xml);
if (header_rs != null) {
header_rs.close();
}
if (matship_rs != null){
matship_rs.close();
}
if (stmt1 != null) {
stmt1.close();
}
if (stmt2 != null) {
stmt2.close();
}
}
} /**
* @return boolean
* @param smtpHost
* 郵件服務器地址
* @param smtpPort
* 傳送端口
* @param from
* 郵件發送方地址
* @param to
* 郵件接收方地址
* @param subject
* 郵件主旨
* @param attachment
* 郵件附檔
* @param content
* 郵件內容
* @param encode
* 郵件編碼方式
*/
public static boolean sendMail(String smtpHost, int smtpPort, String from,
String to, String subject, String attachment, String content,
String encode) {
boolean t = false;
try {
MailUtil mail = new MailUtil(smtpHost, smtpPort);
mail.setFrom(from); //郵件發送方地址
mail.setTo(to); //郵件接收方地址
mail.setSubject(subject); //郵件主旨
mail.setEncode(encode); //郵件編碼方式
mail.setAttachment(attachment); //郵件附檔
mail.setContent(content); //郵件內容
mail.sendMimeMail(); //發送郵件
logger.info("郵件發送成功!");
t = true; } catch (Exception e) {
logger.error("郵件發送失敗!", e);
}
return t;
}
/**
* 根據傳入的數據記錄在當前目錄下集創建一個XML文件。
*
* @param fileName
* 要創建的XML文件名
* @param rs
* 傳入的數據記錄集
* @param encode
* XML文件要使用的編碼
* @throws ParseException
* @throws SQLException
* @throws ParseException
*/
public int createXmlFile(String fileName, ResultSet header_rs,
ResultSet matship_rs,String encode) {
try {
String senderValue,receiverValue;
Document document = DocumentHelper.createDocument();
Element tableElement = document.addElement("XML");
Element rowElement1 = tableElement.addElement("Header");
Element rowElement2 = tableElement.addElement("MasterShipment");
ResultSetMetaData header_rsmd = header_rs.getMetaData();
int header_columnCount = header_rsmd.getColumnCount();
if (!header_rs.next())
throw new RuntimeException("The header_rs argument have not any record.");
// header_rs.beforeFirst();
for (int i = 1; i <= header_columnCount; i++) {
if(i==6){
rowElement1.addElement(header_rsmd.getColumnName(i)).addText(
header_rs.getString(i)==null?"":sdf2.format((Date) sdf1.parse(header_rs.getString(i))));
}else{
rowElement1.addElement(header_rsmd.getColumnName(i)).addText(
header_rs.getString(i)==null?"":header_rs.getString(i));
}
}
if (!matship_rs.next())
throw new RuntimeException("The rs argument have not any record.");
ResultSetMetaData matship_rsmd = matship_rs.getMetaData();
int matship_columncount = matship_rsmd.getColumnCount();
for(int j=1;j<=matship_columncount;j++){
if (j==1){
materShipmentcode = matship_rs.getString(j);
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText(
matship_rs.getString(j)==null?"":matship_rs.getString(j));
}else if (j==3){
senderValue=matship_rs.getString(j);
Element senderName=rowElement2.addElement(matship_rsmd.getColumnName(j));
if(CreateAddressNode(senderName,senderValue)==1){
logger.info("創建address子節點成功!");
}else{
logger.info("創建address子節點失敗!");
return 0;
}
}else if(j==4){
receiverValue=matship_rs.getString(j);
Element receiverName=rowElement2.addElement(matship_rsmd.getColumnName(j));
if(CreateAddressNode(receiverName,receiverValue)==1){
logger.info("創建address子節點成功!");
}else{
logger.info("創建address子節點失敗!");
return 0;
}
}else if(j==8 ||j==16 || j== 18){
if(matship_rs.getString(j)==null || (matship_rs.getString(j)).equals("")){
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText("");
}else{
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText(
sdf4.format(sdf3.parse(matship_rs.getString(j))));
}
}else{
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText(
matship_rs.getString(j)==null?"":matship_rs.getString(j));
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(encode);
format.setTrimText(false);
XMLWriter writer = new XMLWriter(new FileWriter(fileName), format);
writer.write(document);
writer.close();
return 1;
} catch (Exception ex) {
logger.error("創建節點出錯!", ex);
return 0;
}
} }
貼出生成XML的代碼.
package cn.com.yyhj.ycweb.ebox.sis_test;import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;import org.apache.log4j.*;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;import cn.com.yyhj.ycweb.ebox.util.DatabaseUtil;
import cn.com.yyhj.ycweb.ebox.util.IoUtil;
import cn.com.yyhj.ycweb.ebox.util.MailUtil;
public class Sender {
private static Logger logger = Logger.getLogger(Sender.class); private Parameter p = null;
private Connection conn = null;
private StringBuffer mailMsg = null;
private String materShipmentcode,contShiptCode,codeshipment;
private static SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
private static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");
private static SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.GERMAN);
private static SimpleDateFormat sdf3 = new SimpleDateFormat("yyyyMMdd");
private static SimpleDateFormat sdf4 = new SimpleDateFormat("dd-MMM-yyyy",Locale.GERMAN); public static void main(String[] args) {
logger.info("Start...");
if (args.length > 0) {
Sender sender = new Sender(args[0]);
} else {
logger.error("Have not set the parameter file for app.");
System.exit(1);
}
} /**
* 構造方法
*
* @param file
* String
*/
public Sender(String file) { try {
this.p = new Parameter(file);
java.util.Date date = new java.util.Date();
String OutDate = p.sdf1.format(date);
conn = DatabaseUtil.createConnection(p.JDBCDriver, p.dbUrl,
p.dbUser, p.dbPassword); if (this.getData(OutDate, conn) == 1) {
logger.info("Success!");
}
} catch (Exception ex) {
logger.error("Failed!", ex);
} finally {
logger.info("End!");
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
logger.error("Closing Connection Failed !", e);
}
}
} /**
* 獲取發送的資料
*
* @return int if return 0, then has not data; if return 1, then has data;
* if return -1, then occurs error
*/
private int getData(String eboxOutDate, Connection conn)
throws SQLException {
Statement stmt1 = null;
Statement stmt2 = null;
ResultSet header_rs = null;
ResultSet matship_rs = null;
try { stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
stmt2 = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String sql_header = p.sql_header;
String sql_matship = p.sql_matship;
//logger.debug("sql:" + sql_header);
header_rs = stmt1.executeQuery(sql_header);
matship_rs = stmt2.executeQuery(sql_matship);
if (header_rs.next()) {
header_rs.beforeFirst();
// createXmlFile(p.xml, header_rs,matship_rs, "BIG5");
if (createXmlFile(p.xml, header_rs,matship_rs, "BIG5")==1){
sendMail(p.smtpHost, p.smtpPort, p.from, p.to,
p.dataMailSubject, p.xml, null, "big5");
}else{
return 0;
}
return 1;
} else {
logger.info("沒有需要轉出的資料");
return 0;
}
} catch (Exception e) {
logger.error("創建資料發生錯誤!", e);
return -1;
} finally {
IoUtil.deleteFile(p.xml);
if (header_rs != null) {
header_rs.close();
}
if (matship_rs != null){
matship_rs.close();
}
if (stmt1 != null) {
stmt1.close();
}
if (stmt2 != null) {
stmt2.close();
}
}
} /**
* @return boolean
* @param smtpHost
* 郵件服務器地址
* @param smtpPort
* 傳送端口
* @param from
* 郵件發送方地址
* @param to
* 郵件接收方地址
* @param subject
* 郵件主旨
* @param attachment
* 郵件附檔
* @param content
* 郵件內容
* @param encode
* 郵件編碼方式
*/
public static boolean sendMail(String smtpHost, int smtpPort, String from,
String to, String subject, String attachment, String content,
String encode) {
boolean t = false;
try {
MailUtil mail = new MailUtil(smtpHost, smtpPort);
mail.setFrom(from); //郵件發送方地址
mail.setTo(to); //郵件接收方地址
mail.setSubject(subject); //郵件主旨
mail.setEncode(encode); //郵件編碼方式
mail.setAttachment(attachment); //郵件附檔
mail.setContent(content); //郵件內容
mail.sendMimeMail(); //發送郵件
logger.info("郵件發送成功!");
t = true; } catch (Exception e) {
logger.error("郵件發送失敗!", e);
}
return t;
}
/**
* 根據傳入的數據記錄在當前目錄下集創建一個XML文件。
*
* @param fileName
* 要創建的XML文件名
* @param rs
* 傳入的數據記錄集
* @param encode
* XML文件要使用的編碼
* @throws ParseException
* @throws SQLException
* @throws ParseException
*/
public int createXmlFile(String fileName, ResultSet header_rs,
ResultSet matship_rs,String encode) {
try {
String senderValue,receiverValue;
Document document = DocumentHelper.createDocument();
Element tableElement = document.addElement("XML");
Element rowElement1 = tableElement.addElement("Header");
Element rowElement2 = tableElement.addElement("MasterShipment");
ResultSetMetaData header_rsmd = header_rs.getMetaData();
int header_columnCount = header_rsmd.getColumnCount();
if (!header_rs.next())
throw new RuntimeException("The header_rs argument have not any record.");
// header_rs.beforeFirst();
for (int i = 1; i <= header_columnCount; i++) {
if(i==6){
rowElement1.addElement(header_rsmd.getColumnName(i)).addText(
header_rs.getString(i)==null?"":sdf2.format((Date) sdf1.parse(header_rs.getString(i))));
}else{
rowElement1.addElement(header_rsmd.getColumnName(i)).addText(
header_rs.getString(i)==null?"":header_rs.getString(i));
}
}
if (!matship_rs.next())
throw new RuntimeException("The rs argument have not any record.");
ResultSetMetaData matship_rsmd = matship_rs.getMetaData();
int matship_columncount = matship_rsmd.getColumnCount();
for(int j=1;j<=matship_columncount;j++){
if (j==1){
materShipmentcode = matship_rs.getString(j);
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText(
matship_rs.getString(j)==null?"":matship_rs.getString(j));
}else if (j==3){
senderValue=matship_rs.getString(j);
Element senderName=rowElement2.addElement(matship_rsmd.getColumnName(j));
if(CreateAddressNode(senderName,senderValue)==1){
logger.info("創建address子節點成功!");
}else{
logger.info("創建address子節點失敗!");
return 0;
}
}else if(j==4){
receiverValue=matship_rs.getString(j);
Element receiverName=rowElement2.addElement(matship_rsmd.getColumnName(j));
if(CreateAddressNode(receiverName,receiverValue)==1){
logger.info("創建address子節點成功!");
}else{
logger.info("創建address子節點失敗!");
return 0;
}
}else if(j==8 ||j==16 || j== 18){
if(matship_rs.getString(j)==null || (matship_rs.getString(j)).equals("")){
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText("");
}else{
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText(
sdf4.format(sdf3.parse(matship_rs.getString(j))));
}
}else{
rowElement2.addElement(matship_rsmd.getColumnName(j)).addText(
matship_rs.getString(j)==null?"":matship_rs.getString(j));
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(encode);
format.setTrimText(false);
XMLWriter writer = new XMLWriter(new FileWriter(fileName), format);
writer.write(document);
writer.close();
return 1;
} catch (Exception ex) {
logger.error("創建節點出錯!", ex);
return 0;
}
} }
但我看了下這個類,很多都是通過XSD生成XML,而不是生成XML是自動生成XSD.