2012-03-13 69 views
1

数据类型特定的DataTable如何从XML如何从XML

获取数据类型具体的DataTable这是我的代码

string XMLReportFormat [email protected]"<?xml version="1.0" encoding="utf-8" ?> 
<Table> 
    <ReportBody> 
     <TableRow> 
     <ID>1</ID> 
     <ParentID>1</ParentID> 
     <Key>First1</Key> 
     </TableRow> 
     <TableRow> 
     <ID>4</ID> 
     <ParentID>1</ParentID> 
     <Key>FirstChild4</Key> 
     </TableRow> 
    </ReportBody> 
</Table>"; 

StringReader sReader = new StringReader(XMLReportFormat); 
DataSet ds = new DataSet(); 

if (sReader == null) 
    return null; 
ds.ReadXml(sReader); 

在这里我得到列的所有DataTypeString。 我要像IDParentID一些列作为Integer

+0

你正在设置这个xml值到一个属性什么的? – Vinicius 2012-03-13 14:10:11

+0

@Vinicius:为什么财产来到现场? ...我没有使用任何属性 – Sreekumar 2012-03-13 14:15:51

+0

因为如果您正在使用属性,您可以尝试将xml属性(例如:ID)的值解析为具有相同名称的属性的类型。 – Vinicius 2012-03-13 14:17:38

回答

0

呀!我找到了答案。

private static DataTable CreateDataTable() 
{ 
    DataTable dt = new DataTable("TableRow"); 
    dt.Columns.Add(new DataColumn("ID", typeof(int))); 
    dt.Columns.Add(new DataColumn("ParentID", typeof(int))); 
    return dt; 
} 
public static DataTable GetReportFormatFromXML(string XMLReportFormat) 
{ 
    if (XMLReportFormat == string.Empty) 
     return null; 
    StringReader sReader = new StringReader(XMLReportFormat); 
    DataSet ds = new DataSet(); 

    if (sReader == null) 
     return null; 
    ds.Tables.Add(CreateDataTable()); 
    return ds.Tables[0]; 
} 

这条线可以帮助我:)

ds.Tables.Add(CreateDataTable()); 
0

对不起试试这个的TryParse

http://msdn.microsoft.com/en-us/library/f02979c7.aspx

DataRow dr = ...; 
    int number; 
    bool result = Int32.TryParse(dr["column"], out number); 
    if (result) 
    { 
    // is a number , you can use it   
    } 
    else 
    { 
    // convert your data to String 
    } 
+0

'动态'是.NET 4.0,对不对?我正在使用3.5框架 – Sreekumar 2012-03-13 14:03:02

4

我发现最简单的方法是确保你的数据集读取XML架构。该模式将为您的DataSet设置XML的数据类型。

DataSet.ReadXmlSchema 

即:

DataSet ds = new DataSet(); 
ds.ReadXmlSchema(Server.MapPath("/YourSchema.xsd")); 
ds.ReadXml(Server.MapPath("/YourXML.xml")); 

我在微软使用动态数据有一个问题报告,因为一切从XML来是一个字符串。我尝试复制项目到一个新的数据集与数据类型定义,但这很容易。您可以让c#为任何xml文件编写默认架构,然后您可以根据需要进行编辑。

DataSet ds = new DataSet(); 
ds.ReadXml("Data.xml"); 
ds.WriteXmlSchema("Data.xsd"); 

我知道这篇文章很老,但它帮了我很大的忙,所以我想我会分享我学到的东西。