用castor build utility先生成java files.
然后用root class的unmarshall() unmarshall the xml file to Stream.
数据库里建一个Blob的column,就可以放进去了。
拿出来,就是倒过来做。
没有办法给实例,至少有几十行code.

解决方案 »

  1.   

    用JDBC将XML中的数据插入数据库中  我用Oracle作例子,也要用到Oracle里面的Java类(classes12.zip)
    例子:
      首先create table people(name varchar2(20),
                            address varchar2(50),
                              tel varchar2(20),
                              fax varchar2(20),
                              email varchar2(50));
    import java.sql.*;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;public class xml2db
    {
    static Connection con;
    static String nm,add,tel,fax,email,sql;
    static String url = "jdbc:oracle:oci8:@LEO";

    public static void main(String args[])
    {
    try
    {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    con = DriverManager.getConnection(url,"scott","tiger");
    Statement stmt = con.createStatement();

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse("candidate.xml");

    NodeList nl = doc.getElementsByTagName("PERSON");

    for(int i=0;i<nl.getLength();i++)
    {
    Element node=(Element)nl.item(i);

    String nm = node.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue();
    String add =node.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue();
    String tel = node.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue();
    String fax = node.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue();
    String email = node.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue();
    sql = "insert into people values(\'" + nm +"\',\'"+add+"\',\'"+tel+"\',\'"+fax+"\',\'"+email+"\')";
    int ret = stmt.executeUpdate(sql);
    }
    stmt.close();
    con.close();

    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }javac -classpath .;classes12.zip xml2db.java
    java -classpath .;classes12.zip xml2db
    运行!
    用JDBC将数据库中数据取出生成XML文件import java.sql.*;
    import javax.xml.parsers.*;
    import java.io.*;
    import org.apache.crimson.tree.*;
    import org.w3c.dom.*;public class db2xml
    {
    static ResultSet results;
    static Connection con;
    static String nm,add,tel,fax,email,sql;
    static String url = "jdbc:oracle:oci8:@LEO";

    public static void main(String args[])
    {
    Document doc;
    Element people = null;
    Element person = null;
    Element name = null;
    Element address = null;
    Element tel = null;
    Element fax = null;
    Element email = null;

    try
    {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    con = DriverManager.getConnection(url,"scott","tiger");
    Statement stmt = con.createStatement();
    results = stmt.executeQuery("SELECT * FROM PEOPLE");

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = dbf.newDocumentBuilder();
    doc = builder.newDocument();
    people = doc.createElement("PEOPLE");
    while(results.next())
    {
    person = doc.createElement("PERSON");
    people.appendChild(person);

    name = doc.createElement("NAME");
    name.appendChild(doc.createTextNode(results.getString("NAME")));
    person.appendChild(name);

    address = doc.createElement("ADDRESS");
    address.appendChild(doc.createTextNode(results.getString("ADDRESS")));
    person.appendChild(address);

    tel = doc.createElement("TEL");
    tel.appendChild(doc.createTextNode(results.getString("TEL")));
    person.appendChild(tel);

    fax = doc.createElement("FAX");
    fax.appendChild(doc.createTextNode(results.getString("EMAIL")));

    email = doc .createElement("EMAIL");
    email.appendChild(doc.createTextNode(results.getString("EMAIL")));
    person.appendChild(email);
    }
    doc.appendChild(people);
    ((XmlDocument)doc).write(new FileOutputStream(new File("people.xml")));

    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }
    javac -classpath classes12.zip db2xml.java
    java -classpath classes12.zip db2xml
    运行!
      

  2.   

    对了,还有个用来尝试的candidate.xml文件的代码:<?xml version="1.0"?>
    <PEOPLE>
    <PERSON PERSONID="E01">
    <NAME>Tony Blair</NAME>
    <ADDRESS>10 Downing Street ,London UK</ADDRESS>
    <TEL>(061)98765</TEL>
    <FAX>(061)98765</FAX>
    <EMAIL>[email protected]</EMAIL>
    </PERSON>
    <PERSON PERSONID="E02">
    <NAME>Bill Clinton</NAME>
    <ADDRESS>White House,USA</ADDRESS>
    <TEL>(001)6400 98765</TEL>
    <FAX>(001)6400 98765</FAX>
    <EMAIL>[email protected]</EMAIL>
    </PERSON>
    <PERSON PERSONID="E03">
    <NAME>Tom Cruise</NAME>
    <ADDRESS> 57 Jumbo Street,New York,USA</ADDRESS>
    <TEL>(001) 4500 67859</TEL>
    <FAX>(001) 4500 67859</FAX>
    <EMAIL>[email protected]</EMAIL>
    </PERSON>
    <PERSON PERSONID="E04">
    <NAME>Linda Goodman</NAME>
    <ADDRESS>78 Crax Lane,London,UK</ADDRESS>
    <TEL>(061) 54 56789</TEL>
    <FAX>(061) 54 56789</FAX>
    <EMAIL>[email protected]</EMAIL>
    </PERSON>
    </PEOPLE>
      

  3.   

    我的机名是"LEO",上面的Oracle连接串中有用到本地机子的名字!!
    好辛苦呀!!顶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~