如何从XML 中获取特定于DataType的DataTable
这是我的代码
string XMLReportFormat =@"<?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);
在这里,我将列的所有DataType
都作为String
。我想要一些像ID
和ParentID
这样的列作为Integer
我找到的最简单的方法是确保数据集读取xml模式。架构将为数据集设置XML的数据类型。
DataSet.ReadXmlSchema
即:
DataSet ds = new DataSet();
ds.ReadXmlSchema(Server.MapPath("/YourSchema.xsd"));
ds.ReadXml(Server.MapPath("/YourXML.xml"));
我在MicrosoftReports中使用动态数据时遇到了问题,因为来自XML的所有内容都是字符串。我尝试将项复制到定义了dataTypes的新DataSet中,但这要容易得多。您可以让c为任何xml文件编写一个默认模式,然后根据需要对其进行编辑。
DataSet ds = new DataSet();
ds.ReadXml("Data.xml");
ds.WriteXmlSchema("Data.xsd");
我知道这篇文章很旧,但它帮助了我,所以我想我会分享我学到的东西。
抱歉尝试这个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
}
是的!我找到了答案。
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());