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.盼回复。
- <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.盼回复。
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 导入数据库
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
有没有例子提供下啊?
dt.Columns.Add(解析得到的列名,解析得到的列数据类型); // 创建列
// ....
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 导入数据库
================================
完全正确
可以详细点吗? 看来也只有你知道我在说的问题了:)
如果是我只能读取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
谢谢,我参考一下。
-------》
如果都是变的
你最好改变一下你的结构
把每个表的信息都单独弄到一个节点里去
类似这样
<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节点
然后遍历就可以了
我尝试更改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>能不能再麻烦你指点一下?
<NewTable Name="表A">
<ColumnInfo>
</ColumnInfo>
<NewTable Name="表B">
<ColumnInfo>
</ColumnInfo>
而不是<NewTable Name="表A">
<ColumnInfo>
</ColumnInfo>
<NewTable Name="表B">
<ColumnInfo>
</ColumnInfo>
<NewTable>
---->
为什么要内嵌进去
表与表之间本身就应该是独立的
表A跟表B就应该是两个兄弟节点
否则结构太混乱了
刚才是我的错误,我现在 已经调整好了,现在读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。所以不了解望继续指点
现在的结构是对的如果你要读的话,可以这样
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语句了
}
}