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

时间:2012-03-13 13:59:29

标签: c# xml datatable dataset type-conversion

如何从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。 我想要一些像ParentIDInteger这样的列作为{{1}}

3 个答案:

答案 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)

抱歉试试这个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
  }

答案 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());