你的数据库是什么数据库:我用的是SQLserver用它的存储过程:然后你用程序调用存储过程,把 xml文件传进去就行了。
CREATE proc usp_InsertXmlToTable
   @xmldoc ntext
asset nocount on
Declare @hdoc intbegin
exec sp_xml_preparedocument @hdoc output,@xmldoc
--更新tb_sys_clan表
insert into tb_sys_clan
SELECT *
FROM   OPENXML (@hdoc, '/tables/table/row[../@tableName="tb_sys_clan"]',1)
       WITH (   Id     int             './Id/text()',
              ClanName  varchar(50)        './ClanName/text()'            
           )exec sp_xml_removedocument @hdoc 
end
GO

解决方案 »

  1.   

    在解释XML中用到了xpath进行定位和过滤。
    看看你用的数据库是不是技持 XML 和存储过程。
      

  2.   

    我的程序要求支持多种数据库格式:最基本:MYSQL、SQLSERVER、ORACLE
      

  3.   

    jianghuxing(回头看看原来我一无所有) :
      多谢帮助!
      请问:“在解释XML中用到了xpath进行定位和过滤。”内容能否详细些(我太笨了)
      用什么方法解释XML文件呢?
      

  4.   

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new File("d:/test.xml"));
    Element rootElement = document.getDocumentElement();
    NodeList list = rootElement.getElementsByTagName("theElementNameWhichYouWantToUse");
    for (int i = 0; i < list.getLength(); i++) {
    Element element = (Element)list.item(i);
              NodeList yearList = element.getElementsByTagName("theSubElementName");
    for (int j = 0; j < yearList.getLength(); j++) {
        Text text = (Text)yearList.item(j).getFirstChild();
        System.out.println(text.getData());//输出到控制台,楼主可以进行相应的存储
    }
    }//这是我借用 DreamDragon_NEU(梦龙) 回复别人一个问题时候用到的,你自己看看,可以改了吧?
      

  5.   

    1、 用那个数据库的存储过程不要解析XML,你直接把它当成字符的方式传进去就行了。
    2、现在很多数据库还不支持XML如果你要通用的那只能通过XPATH定位,然后把XML中的数据取出来,一条一条的写了。
    3、一个把XML文件转成String并保存成文件的例字。我以前做的时候是从数据库---XML----数据库package com.netec.congress.business.conversion;import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.StringWriter;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;
    import org.apache.xml.serialize.OutputFormat;
    import org.apache.xml.serialize.XMLSerializer;
    import org.w3c.dom.Attr;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Text;
    import com.netec.congress.business.xml.DataToXML;
    public class DataImportOutput {
    private static Document doc = null;

    public DataImportOutput(Document document){
    DataImportOutput.doc=document;
    }

    private String otputDOMToXMLString(Document doc) throws IOException {
    String XMLString = "";
    //建立dom的输出格式
    OutputFormat format = new OutputFormat(doc);
    StringWriter stringOut = new StringWriter();
    XMLSerializer serial = new XMLSerializer(stringOut, format);
    serial.asDOMSerializer();
    serial.serialize(doc.getDocumentElement());
    XMLString = stringOut.toString();
    System.out.println(XMLString);
    return XMLString;
    }

    private void saveXMLString(String XMLString, String fileName)
    throws IOException {
    File file = new File(fileName);
    if (file.exists()) {
    file.delete();
    }

    file.createNewFile();
    if (file.canWrite()) {
    FileWriter fileOut = new FileWriter(file);
    fileOut.write(XMLString);
    fileOut.close();
    }
    } public void saveDOMToXML(String filePath, Document doc) throws IOException {
    String XMLString = null;
    XMLString = this.otputDOMToXMLString(doc); //把document转为字符串型
    this.saveXMLString(XMLString, filePath); //保存为xml格式
    }

    public Element getTableDOM(String tableName, List rowsList) {
    Element columNameElement=null;
    Text columTextNode=null;
    String columName = "";
    String columValue = "";
    Set set=null;
    HashMap map=null;
    DataToXML dataToXML=null;
    Element row=null;
    Iterator iterator=null;

    Iterator rowIterator = rowsList.iterator();

    Element table = doc.createElement("table"); //创建table结点
    Attr attr = doc.createAttribute("tableName"); //创建table结点的属性结点tableName
    attr.setValue(tableName); //设置属性结点的属性值为传入参数tableName
    table.setAttributeNode(attr); //把属性结点添加到table结点上

    while (rowIterator.hasNext()) {
     row = doc.createElement("row");
     dataToXML = (DataToXML) rowIterator.next();
     map = dataToXML.getMap();//map中保存着表的所有字段名,及字段对应的值
     set = map.keySet();
     iterator = set.iterator();
    while (iterator.hasNext()) {
    columName = (String) iterator.next();
    columValue = (String) map.get(columName);
    columNameElement = doc.createElement(columName);
    columTextNode = doc.createTextNode(columValue);
    columNameElement.appendChild(columTextNode);
    row.appendChild(columNameElement);
    }
    table.appendChild(row);
    }

    return table;
    }

    }
      

  6.   

    feixiang2005(飞翔) :  感谢飞翔,这个方法很好!
      可是由于我所操作的XML文件有很多(很多不同名称的XML文件并且每个xml文件数据量很大),如果按节点逐一添加,性能会受到很大影响.请问用什么方法可以一个XML文件一次更新到表中呢?
      

  7.   

    XMLString = this.otputDOMToXMLString(doc); //把document转为字符串型
    this.saveXMLString(XMLString, filePath); //保存为xml格式那两个方法可以转成String并保存XML。转成String后把值传给那个存储过程。就行了。
      

  8.   

    jianghuxing(回头看看原来我一无所有):
        调用方法:otputDOMToXMLString 生成字符串是什么格式呢?生成后怎么更新到数据库中?