web-dev-qa-db-fra.com

DataTable ne prend pas en charge l'inférence de schéma à partir de XML.

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

C'est quoi mon fichier XML?

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

        return true;
    }
32
monkey_boys

Essayez plutôt d'utiliser un Dataset

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

Trouvé à

DataTable.ReadXml (nomfichier) renvoie une erreur. Pourquoi?

47
Adriaan Stander

Si vous lisez un fichier XML à partir de DataTable.WriteXml, veillez à inclure un XmlWriteMode.WriteSchema

Exemple: 

Table.WriteXml(DataFilePath, XmlWriteMode.WriteSchema);
36
Mark Ibanez

Cela marche

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

Si vous écrivez la table, vous pouvez résoudre ce problème en écrivant le schéma en même temps que la table. Voir: http://msdn.Microsoft.com/en-us/library/ms135456.aspx

4
Matthew Sharpe

Essayez ceci, cela fonctionnera:

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
max

OK, c'est un "Moi aussi!" répondez, cependant aucune des réponses ci-dessus n’aborde le fond de la question.

Pour gérer correctement le problème, laissez d’abord le DataTable déduire le schéma à partir du xml en appelant la méthodeReadXmlSchema, c.-à-d.

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

    return true;
}

De cette façon, le schéma est déduit du XML que vous essayez de charger et aucune erreur n'est renvoyée!

0
Nepaluz