如何从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
这样的列作为{{1}}
答案 0 :(得分:4)
我找到的最简单方法是确保您的DataSet读取xml架构。该架构将为您的DataSet设置XML的数据类型。
DataSet.ReadXmlSchema
即:
DataSet ds = new DataSet();
ds.ReadXmlSchema(Server.MapPath("/YourSchema.xsd"));
ds.ReadXml(Server.MapPath("/YourXML.xml"));
我在使用Microsoft Reports中的动态数据时遇到问题,因为来自XML的所有内容都是字符串。我尝试将项目复制到定义了dataTypes的新DataSet,但这更容易。您可以让c#为任何xml文件编写一个默认模式,然后根据需要进行编辑。
DataSet ds = new DataSet();
ds.ReadXml("Data.xml");
ds.WriteXmlSchema("Data.xsd");
我知道这篇文章很老但它帮了我,所以我想我会分享我学到的东西。
答案 1 :(得分:0)
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
}
答案 2 :(得分: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());