DataTable不支持Xml的架构推断。

时间:2009-12-20 11:04:03

标签: c# xml datatable

<?xml version="1.0" encoding="utf-8"?>
<PHP_Adapter>
  <Adapter>
    <ID>11</ID>
    <Provider>22</Provider>
    <Connectstring>33</Connectstring>
  </Adapter>
</PHP_Adapter>

这个我的Xml文件有什么问题?

    bool CheckAdapterExist(string aid)
    {
        DataTable dt = new DataTable();
        dt.ReadXml(axml);
        MessageBox.Show(dt.Rows[0]["ID"].ToString());

        return true;
    }

6 个答案:

答案 0 :(得分:51)

尝试使用数据集而不是

DataSet ds = new DataSet();
ds.ReadXml(@"d:\test.xml");
MessageBox.Show(ds.Tables[0].Rows[0]["ID"].ToString());

发现于

DataTable.ReadXml(filename) throws an error. Why?

答案 1 :(得分:36)

如果您正在阅读XML中的DataTable.WriteXml文件,请确保添加XmlWriteMode.WriteSchema

示例:

Table.WriteXml(DataFilePath, XmlWriteMode.WriteSchema);

答案 2 :(得分:7)

这有效

        string XML = @"
          <MyTable>
            <MyRecord>
              <Col_1>test</Col_1>
              <Col_2>1234</Col_2>
            </MyRecord>
            <MyRecord>
              <Col_1>Record 2</Col_1>
              <Col_2>2</Col_2>
            </MyRecord>
          </MyTable>
        ";
        DataSet DS = new DataSet();
        DS.ReadXml(new StringReader(XML));

        DataTable DT=DS.Tables[0];

答案 3 :(得分:4)

试试这个,这将有效:

System.Xml.XmlTextReader reader =
                new System.Xml.XmlTextReader(@"C:\Users\Mayank\Documents\Projects\XMLTEST\XMLTEST\XMLFile1.xml");
            DataSet newTable = new DataSet();
            newTable.ReadXml(reader);
            DataTable _dt=newTable.Tables[0];

答案 4 :(得分:4)

如果您是编写表的人,可以通过在表的同时编写模式来解决此问题。请参阅:http://msdn.microsoft.com/en-us/library/ms135456.aspx

答案 5 :(得分:-1)

好的,这是“我也是!”回答,但上述答案都没有解决问题的细节。

要正确处理问题,首先让DataTable通过调用 ReadXmlSchema 方法从xml推断出架构,即

bool CheckAdapterExist(string aid)
{
    DataTable dt = new DataTable();
    dt.ReadXmlSchema(axml);
    dt.ReadXml(axml);
    MessageBox.Show(dt.Rows[0]["ID"].ToString());

    return true;
}

这样,架构就会从您尝试加载的XML中产生,并且不会抛出任何错误!