直接取数据庫的信息生成XML不是更好!
[email protected]

解决方案 »

  1.   

    直接把上面的文档输出成下面的XML,好象不现实,因为他基本上无规律可循,你不如结合程序和数据库来进行生成,这样肯定能解决。
      

  2.   

    yes but only for sql2k“select * from table for xml raw“??if other you can chaged follow:  public static String record2xml(ResultSet records){
        try{
          ResultSetMetaData rsmd=records.getMetaData();
          int _i=0;
          String _xmlRecord="<?xml version=\"1.0\" encoding=\"gb2312\" ?>";
          _xmlRecord+="<root>";      while(records.next()){
            _xmlRecord+="<data ";
            for(int i=1;i<rsmd.getColumnCount()+1;i++)
            {
              _xmlRecord+=" ";  _xmlRecord+=rsmd.getColumnName(i);  _xmlRecord+="=\"";          String _te=records.getString(i);
              if(_te!=null) _te.trim();
              _xmlRecord+=_te;       _xmlRecord+="\" ";
            }
            _xmlRecord+=" />\n";
          }
          _xmlRecord+="</root>";
          return _xmlRecord;
        }catch(Exception e){
          System.out.println("record2xml of InnerInvoke function is error:"+e);
          return "";
        }
      }
      

  3.   

    不是很清楚,给你看看一个很简单的,XML解析程序:import java.awt.*;
    import java.io.*;
    import org.jdom.*;
    import org.jdom.output.XMLOutputter;
    import java.util.ArrayList;public class Test
    {
        public static void main(String args[]) throws IOException
        {
         Test test = new Test();
         String request=test.getReaderDetails();
         System.out.println(request);
         
         String requestInfo=test.getResponse(request);
         System.out.println(requestInfo);
        }
        
       protected String getReaderDetails()
       {
          try
          {
           Element RequesterDetailsRoot = new Element("Request");
           Attribute attribute = new Attribute("PROVIDERID","1");
           ArrayList detailAttribute = new ArrayList();
           detailAttribute.add(attribute);
          
           RequesterDetailsRoot.setAttributes(detailAttribute);
           RequesterDetailsRoot.addContent(new Element("CLIENTID").setText("1234"));
           RequesterDetailsRoot.addContent(new Element("CLIENTNAME").setText("gaoxin"));     
           RequesterDetailsRoot.addContent(new Element("FILEID").setText("1"));
           RequesterDetailsRoot.addContent(new Element("FILETITLE").setText("Thinking in Web service"));
          
           Document requesterDetails = new Document(RequesterDetailsRoot);
           XMLOutputter outputter = new XMLOutputter(" ",true);
           return outputter.outputString(requesterDetails);
          }
          catch(Exception e)
          {
           e.printStackTrace(System.out);
           return "Error";
          }
       } 
     
       protected String getReaderDetails()
       {
          try
          {
           Element RequesterDetailsRoot = new Element("Request");
           Attribute attribute = new Attribute("PROVIDERID","1");
           ArrayList detailAttribute = new ArrayList();
           detailAttribute.add(attribute);
          
           RequesterDetailsRoot.setAttributes(detailAttribute);
           RequesterDetailsRoot.addContent(new Element("CLIENTID").setText("1234"));
           RequesterDetailsRoot.addContent(new Element("CLIENTNAME").setText("gaoxin"));     
           RequesterDetailsRoot.addContent(new Element("FILEID").setText("1"));
           RequesterDetailsRoot.addContent(new Element("FILETITLE").setText("Thinking in Web service"));
          
           Document requesterDetails = new Document(RequesterDetailsRoot);
           XMLOutputter outputter = new XMLOutputter(" ",true);
           return outputter.outputString(requesterDetails);
          }
          catch(Exception e)
          {
           e.printStackTrace(System.out);
           return "Error";
          }
       }
    }
      

  4.   

    除非只实现你上面这个sql,否则.....
      

  5.   

    我刚好写了一个xqy的组件,你可已参考函数
    public static Element parseResult(ResultSet rs)package corecraft.db.xqy;import org.dom4j.DocumentFactory;
    import org.dom4j.Element;
    import org.dom4j.io.DOMReader;
    import org.apache.log4j.Logger;import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;import corecraft.util.DBToolkit;
    import corecraft.db.pool.DBManager;
    import corecraft.db.xqy.pagination.Pagination;
    import corecraft.config.CoreConfigFactory;import java.sql.*;/**
     * Created by IntelliJ IDEA.
     * User: Dickensi Wen
     * Date: 2003-8-16
     * Time: 19:26:50
     * To change this template use Options | File Templates.
     */
    public class XMLQuery {
        private static DocumentBuilderFactory dbf = null;
        private static DocumentBuilder builder = null;
        private static org.dom4j.Document domTemplate = null;
        private static DocumentFactory df = DocumentFactory.getInstance();
        private static DOMReader domReader = new DOMReader();
        private static Logger logger = Logger.getLogger(XMLQuery.class) ;
        private static Pagination paginationCtrl = null;    static {
            try {
                String strPgClass = CoreConfigFactory.getProperties("db.pagination") ;
                logger.info("Parpare to initial Dom");
                dbf = DocumentBuilderFactory.newInstance();
                builder = dbf.newDocumentBuilder();
                domTemplate = XMLQuery.createDom();
                logger.info("Successed in initial Dom");
                paginationCtrl = (Pagination)Class.forName(strPgClass).newInstance();            logger.info("Load Pagination " + paginationCtrl + " success.");        } catch (Exception e) {
                 logger.error("Load dom error",e);
            }    }    public static org.dom4j.Document createDom() {
            try {
                org.dom4j.Document doc = df.createDocument(df.createElement("data"));
                return doc;
            } catch (Exception e) {
                logger.error("Error in create dom",e);
                return null;
            }
        }    static public Element query(String sql) {
            Connection con = DBManager.getConnection();
            Element oResult = null;
            Statement st = null;
            ResultSet rs = null;
            try {
                st = con.createStatement();
                rs = st.executeQuery(sql);
            } catch (Exception e) {
               logger.error("Query failure: " + sql,e);
            }        oResult = parseResult(rs);
            DBToolkit.close(rs);
            DBToolkit.close(st);
            DBToolkit.close(con);
            return oResult;
        }    static public Element query(PreparedStatement ps) {
            Element oResult = null;
            ResultSet rs = null;
            try {
                rs = ps.executeQuery();
            } catch (Exception e) {
                logger.error("Query failed in prepared statement",e);
            }
            oResult = parseResult(rs);
            DBToolkit.close(rs);
            return oResult;
        }    public static Element parseResult(ResultSet rs){
            org.dom4j.Document dom = (org.dom4j.Document) domTemplate.clone();
            Element root = (Element) dom.selectSingleNode("//data");
            Element currentElement = null;
            Element tempElement = null;
            try {
                while (rs.next()) {
                    ResultSetMetaData rm = rs.getMetaData();
                    int length = rm.getColumnCount();
                    String tableName = null;
                    currentElement = root.addElement("tuple");
                    for (int i = 1; i <= length; i++) {
                        tempElement = df.createElement(rm.getColumnName(i).toUpperCase());
                        tempElement.setText(rs.getString(i) == null ? "" : rs.getString(i));
                        tableName = rm.getTableName(i);
                        if(tableName == null || tableName.equals("")){
                            tableName = "SYSTMEDEFAULT";
                        }else{
                            tableName = tableName.toUpperCase();
                        }
                        setChildNodeValue(currentElement, tempElement, tableName);
                    }
                }
            } catch (Exception e) {
                logger.error(e);
            }
            return root;
        }/**
     * db operate insert and delete update method
     * @param sql
     * @return
     */
        static public boolean execute(String sql) {
            Connection con = DBManager.getConnection();
            Statement st = null;
            try {
                st = con.createStatement();
                st.execute(sql);
            } catch (Exception e) {
                 logger.error("$$$$$$$$$$$Query failure: " + sql,e);
                 return false;
            } finally {
                DBToolkit.close(con);
            }
            return true;
        }    private static boolean setChildNodeValue(Element oEleNode, Element node, String childNodeName) {
            if (oEleNode == null) {
                return false;
            }
            try {
                Element oChild = (Element) oEleNode.selectSingleNode(childNodeName);            if (oChild == null) {
                    oChild = df.createElement(childNodeName);
                    oEleNode.add(oChild);
                }
                oChild.add(node);
            } catch (Exception e) {
                return false;
            }
            return true;
        }
        public static void main(String arg[]) {
            //Outer.pl(XMLQuery.query("select * from jiveuser k1,jivemessage where k1.userid=jivemessage.userid  limit 1,2 "));
            //logger.info(XMLQuery.buildDom("<?xml version='1.0' encoding='gb2312'?><htllo>sdfd你好吗sf</htllo>").asXML());
        }
    }