如何从XML中获取特定于DataType的DataTable



如何从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。我想要一些像IDParentID这样的列作为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());

最新更新