web-dev-qa-db-fra.com

Convertir XML en DataTable

J'ai un fichier XML que je veux insérer dans un fichier Datatable . Le format du fichier XML est comme ci-dessous:

<userid ID="37729">
  <TestId ID="84" TimeRemaining="60" />
  <QuestId ID="1">
    <Answer1>
    </Answer1>
    <Answer2>B</Answer2>
    <Answer3>
    </Answer3>
    <Answer4>
    </Answer4>
  </QuestId>
</userid>

Maintenant, je veux insérer cela dans un tableau de données comme ci-dessous:

Question Id     Answer1      Answer2        Answer3        Answer4
1                 A                                         D

2                             B              C     

3                                            C                     

Quelqu'un peut-il m'aider à atteindre cet objectif?.

10
Vijjendra

Je voudrais d'abord créer une DataTable avec les colonnes dont vous avez besoin, puis le remplir via Linq-to-XML.

Vous pouvez utiliser une requête de sélection pour créer un objet qui représente chaque ligne, puis utiliser l'approche standard pour créer DataRows pour chaque élément ...

class Quest
{
    public string Answer1;
    public string Answer2;
    public string Answer3;
    public string Answer4;
}

public static void Main()
{
    var doc = XDocument.Load("filename.xml");

    var rows = doc.Descendants("QuestId").Select(el => new Quest
    {
        Answer1 = el.Element("Answer1").Value,
        Answer2 = el.Element("Answer2").Value,
        Answer3 = el.Element("Answer3").Value,
        Answer4 = el.Element("Answer4").Value,
    });

    // iterate over the rows and add to DataTable ...

}
14
ColinE
DataSet ds = new DataSet();
ds.ReadXml(fileNamePath);
12
ShaneBlake

Comment lire des données XML dans un ensemble de données à l'aide de Visual C # .NET contient certains détails. En principe, vous pouvez utiliser la méthode surchargée DataSet ReadXml pour obtenir les données dans un DataSet. Vos données XML seront dans le premier DataTable.

Il existe également une méthode DataTable.ReadXml .

2
DOK

Vous pouvez utiliser ce code (recommandé)

 MemoryStream objMS = new MemoryStream();
 DataTable oDT = new DataTable();//Your DataTable which you want to convert
 oDT.WriteXml(objMS);
 objMS.Position = 0;
 XPathDocument result = new XPathDocument(objMS);

C'est une autre façon, mais d'abord ex. est recommandé 

StringWriter objSW = new StringWriter();
DataTable oDt = new DataTable();//Your DataTable which you want to convert
oDt.WriteXml(objSW);
string result = objSW.ToString();
1
yeasir007