XML文件内容:===============================================================- <NewTables>
- <NewTable Name="AA">
  <PK>False</PK> 
  <COLUMNNAME>Test1</COLUMNNAME> 
  <DATATYPE>integer</DATATYPE> 
  <LENGTH>4</LENGTH> 
  <ALLOWNULLS>True</ALLOWNULLS> 
  </NewTable>
- <NewTable Name="AA">
  <PK>False</PK> 
  <COLUMNNAME>Test2</COLUMNNAME> 
  <DATATYPE>integer</DATATYPE> 
  <LENGTH>4</LENGTH> 
  <ALLOWNULLS>True</ALLOWNULLS> 
  </NewTable>
- <NewTable Name="AA">
  <PK>False</PK> 
  <COLUMNNAME>Test3</COLUMNNAME> 
  <DATATYPE>integer</DATATYPE> 
  <LENGTH>4</LENGTH> 
  <ALLOWNULLS>True</ALLOWNULLS> 
  </NewTable>
- <NewTable Name="BB">
  <PK>False</PK> 
  <COLUMNNAME>TestBB1</COLUMNNAME> 
  <DATATYPE>integer</DATATYPE> 
  <LENGTH>4</LENGTH> 
  <ALLOWNULLS>True</ALLOWNULLS> 
  </NewTable>
- <NewTable Name="BB">
  <PK>True</PK> 
  <COLUMNNAME>TestBB2</COLUMNNAME> 
  <DATATYPE>integer</DATATYPE> 
  <LENGTH>4</LENGTH> 
  <ALLOWNULLS>False</ALLOWNULLS> 
  </NewTable>
- <NewTable Name="BB">
  <PK>False</PK> 
  <COLUMNNAME>TestBB3</COLUMNNAME> 
  <DATATYPE>integer</DATATYPE> 
  <LENGTH>4</LENGTH> 
  <ALLOWNULLS>True</ALLOWNULLS> 
  </NewTable>
  </NewTables>===============================================================
能否将这个XML文件生成数据表的两个表AA和BB.盼回复。

解决方案 »

  1.   

    用DataSet的Xml读取 然后转 for循环DataTable insert到数据库里面
      

  2.   

    当然可以 
    dataset.readxml(流或路径);
    datatable tableAA = new ...;
    datatalbe tableBB = new .....;foreach(datatable table in dataset)
    {
        if (table.localname == "NewTable")
        {
            //取出newtable的值
            //判断是 AA 还是 BB
            if(是AA)
               //tableAA添加一行
            else if(是bb)
               //tableBB添加一行
        }
    }之后将tableAA tableBB 导入数据库
      

  3.   

    XMLDataDocument using System;
    using System.Data;
    using System.Xml;public class Sample
    {
      public static void Main()
      {
         //Create an XmlDataDocument.
         XmlDataDocument doc = new XmlDataDocument();     //Load the schema file.
         doc.DataSet.ReadXmlSchema("store.xsd");      //Load the XML data.
         doc.Load("2books.xml");     //Update the price on the first book using the DataSet methods.
         DataTable books = doc.DataSet.Tables["book"];
         books.Rows[0]["price"] = "12.95";       Console.WriteLine("Display the modified XML data...");
         doc.Save(Console.Out);
      }
    } // End class
      

  4.   

    xml反序列化为对象实体,在ddl脚本解释接口中以该对象类型为参数,最后针对该接口分别实现各个数据库的实际脚本解释对象即可
      

  5.   

    我这XML里有2个表啊,大家看仔细了么
      

  6.   

    一个表和两都一样.dataset读取然后insert到数据库
      

  7.   

    读取XML的时候判断一下tag,看是AA表还是BB表,然后再导入数据库
      

  8.   

    to fht123:
     有没有例子提供下啊?
      

  9.   

    LZ 的 xml 存储的是 【表模式】, 不是数据哦XmlReader/XmlDocument 读取此 xml 文档DataTable dt = new DataTable();
    dt.Columns.Add(解析得到的列名,解析得到的列数据类型); // 创建列
    // ....
      

  10.   

    当然可以 
    dataset.readxml(流或路径);
    datatable tableAA = new ...;
    datatalbe tableBB = new .....;foreach(datatable table in dataset)
    {
        if (table.localname == "NewTable")
        {
            //取出newtable的值
            //判断是 AA 还是 BB
            if(是AA)
               //tableAA添加一行
            else if(是bb)
               //tableBB添加一行
        }
    }之后将tableAA tableBB 导入数据库
    ================================
    完全正确
      

  11.   

    不用那么麻烦...1.用 Microsoft(R) Xml 架构/数据类型支持实用工具 xsd.exe 生成架构,例如xsd.exe test.xml2.将生成的 test.xsd 直接拖进VS打开的项目中,VS会自动生成数据源...3.更高级的用法是用 xsd.exe 直接生成代码,创建对象数据源...
      

  12.   

    to Jinglecat(晓风残月):
      可以详细点吗? 看来也只有你知道我在说的问题了:)
      

  13.   

    我不知道有没有现成的工具
    如果是我只能读取XML文件
    然后分析字段拼SQL生成相应的表
    string sql = "";
    XmlNodeList aa = doc.SelectNodes("/NewTables/NewTable[@Name='AA']");
    sql = "CREATE TABLE ";
    foreach(XmlNode a in aa)
    {
        sql += "";//拼接SQL语句
    }
    //执行SQL语句XmlNodeList bb = doc.SelectNodes("/NewTables/NewTable[@Name='BB']");
    //同上具体怎么拼接语句可以参考http://www.pgsqldb.org/pgsqldoc-7.0c/sql-createtable.htm
      

  14.   

    to lovefootball:
     谢谢,我参考一下。
      

  15.   

    AA,BB,  都是变的,有可能有50多个表,然后 我1个个枚举么?郁闷了
      

  16.   

    AA,BB, 都是变的
    -------》
    如果都是变的
    你最好改变一下你的结构
    把每个表的信息都单独弄到一个节点里去
    类似这样
    <NewTable Name="AA">
    <TableInfo>
    <PK>False</PK>
    <COLUMNNAME>Test1</COLUMNNAME>
    <DATATYPE>integer</DATATYPE>
    <LENGTH>4</LENGTH>
    <ALLOWNULLS>True</ALLOWNULLS>
    </TableInfo>
    <TableInfo>
    <PK>False</PK>
    <COLUMNNAME>Test2</COLUMNNAME>
    <DATATYPE>integer</DATATYPE>
    <LENGTH>4</LENGTH>
    <ALLOWNULLS>True</ALLOWNULLS>
    </TableInfo>
    <TableInfo>
    <PK>False</PK>
    <COLUMNNAME>Test3</COLUMNNAME>
    <DATATYPE>integer</DATATYPE>
    <LENGTH>4</LENGTH>
    <ALLOWNULLS>True</ALLOWNULLS>
    </TableInfo>
    </NewTable>然后用doc.SelectNodes得到所有的NewTable节点
    然后遍历就可以了
      

  17.   

    to lovefootball :
    我尝试更改XML结构,现在改为如下结构:
    - <NewTable Name="表A">
    - <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>表A列1</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>表A列2</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>表A列3</COLUMNNAME> 
      <DATATYPE>nvarchar</DATATYPE> 
      <LENGTH>50</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
    - <NewTable Name="表B">
    - <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>表B列1</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>表B列2</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>表B列3</COLUMNNAME> 
      <DATATYPE>nvarchar</DATATYPE> 
      <LENGTH>50</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
      </NewTable>
      </NewTable>如果你仔细看的话,会看到表B其实“内嵌”到表A里去了,能不能改成?
    - <NewTable Name="表1">
    + <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>表1列1</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    + <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>表1列2</COLUMNNAME> 
      <DATATYPE>nvarchar</DATATYPE> 
      <LENGTH>50</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    + <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>表1列3</COLUMNNAME> 
      <DATATYPE>smallint</DATATYPE> 
      <LENGTH>1</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
    + <NewTable Name="表2">
    + <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>表2列1</COLUMNNAME> 
      <DATATYPE>bit</DATATYPE> 
      <LENGTH>1</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
    + <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>表2列2</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>表2列3</COLUMNNAME> 
      <DATATYPE>nvarchar</DATATYPE> 
      <LENGTH>50</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
      </NewTable>
      </NewTable>能不能再麻烦你指点一下?
      

  18.   

    可能我上面 表达不对,我希望要
    <NewTable Name="表A">
     <ColumnInfo>
     </ColumnInfo>
    <NewTable Name="表B">
     <ColumnInfo>
     </ColumnInfo>
    而不是<NewTable Name="表A">
     <ColumnInfo>
     </ColumnInfo>
     <NewTable Name="表B">
     <ColumnInfo>
     </ColumnInfo>
    <NewTable>
      

  19.   

    如果你仔细看的话,会看到表B其实“内嵌”到表A里去了
    ---->
    为什么要内嵌进去
    表与表之间本身就应该是独立的
    表A跟表B就应该是两个兄弟节点
    否则结构太混乱了
      

  20.   

    to lovefootball:
    刚才是我的错误,我现在 已经调整好了,现在读XM文件的时候有点问题了。。- <NewTables>
    - <NewTable Name="表A">
    - <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>A1</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>A2</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>A3</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
      </NewTable>
    - <NewTable Name="表B">
    - <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>B1</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>True</PK> 
      <COLUMNNAME>B2</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>False</ALLOWNULLS> 
      </ColumnInfo>
    - <ColumnInfo>
      <PK>False</PK> 
      <COLUMNNAME>B3</COLUMNNAME> 
      <DATATYPE>integer</DATATYPE> 
      <LENGTH>4</LENGTH> 
      <ALLOWNULLS>True</ALLOWNULLS> 
      </ColumnInfo>
      </NewTable>
      </NewTables>以前很少用到XML。所以不了解望继续指点
      

  21.   


    现在的结构是对的如果你要读的话,可以这样
    XmlNodeList list = doc.SelectNodes("/NewTables/NewTable");
    foreach(XmlNode node list)
    {
        //每个Node就是一张表,所以你可以在这个循环里面拼SQL
        //每个Node具有多个ColumnInfo子节点,因此你还要根据Node得到每个ColumnInfo
        XmlNodeList columns = node.SelectNodes("ColumnInfo");
        foreach(XmlNode column in columns)
        {
            //每个column就是每个ColumnInfo节点,你可以拼SQL语句了
        }
    }
      

  22.   

    问题已解决^_^,很感谢lovefootball及以上各位