我這用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;
}
    } }