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?.
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 ...
}
DataSet ds = new DataSet();
ds.ReadXml(fileNamePath);
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 .
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();