【问题标题】:DataTable does not support schema inference from Xml.?DataTable 不支持来自 Xml 的模式推断。?
【发布时间】:2010-12-28 11:26:10
【问题描述】:
<?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;
    }

【问题讨论】:

    标签: c# xml datatable


    【解决方案1】:

    如果您从DataTable.WriteXml 读取XML 文件,请确保包含XmlWriteMode.WriteSchema

    例子:

    Table.WriteXml(DataFilePath, XmlWriteMode.WriteSchema);
    

    【讨论】:

    • 如果 ReadXml 需要它,你会认为它应该默认写入模式!!!谢谢。
    • 谢谢马克!这应该被标记为实际答案。 DataTable 不知道架构,除非它包含在原始导出中。解决此问题的另一种方法是在创建 DataTable 对象时手动创建模式,然后从 XML 中读取数据。
    【解决方案2】:

    尝试使用数据集而不是

    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?

    【讨论】:

    • 我认为问题与表格有关,而不是与数据集有关。另外,正确的方法是将架构添加到自定义表中。
    • @fcm:我相信@adriaan 暗示使用DataSet 而不是DataTable 是获得OP 所寻求的结果的一种方法..
    【解决方案3】:

    试试这个,这会奏效:

    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】:

      如果你是写表的人,你可以通过在写表的同时写模式来解决这个问题。见:http://msdn.microsoft.com/en-us/library/ms135456.aspx

      【讨论】:

      • 您可能需要包含一个示例,以防链接发生变化。
      【解决方案5】:

      这行得通

              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];
      

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多