Ich habe eine XML-Datei, die ich in eine Datentabelle einfügen will .. Das Format der XML-Datei sieht wie folgt aus
<userid ID="37729">
<TestId ID="84" TimeRemaining="60" />
<QuestId ID="1">
<Answer1>
</Answer1>
<Answer2>B</Answer2>
<Answer3>
</Answer3>
<Answer4>
</Answer4>
</QuestId>
</userid>
Nun möchte ich das in eine Datentabelle wie folgt einfügen:
Question Id Answer1 Answer2 Answer3 Answer4
1 A D
2 B C
3 C
Kann mir jemand helfen, dies zu erreichen.
Ich würde zuerst eine DataTable
mit den von Ihnen benötigten Spalten erstellen und diese dann über Linq-to-XML auffüllen.
Sie können eine Select-Abfrage verwenden, um ein Objekt zu erstellen, das jede Zeile darstellt, und dann die Standardmethode zum Erstellen von DataRows für jedes Element verwenden.
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);
So lesen Sie XML-Daten mithilfe von Visual C # in ein DataSet enthält einige Details. Grundsätzlich können Sie die überladene DataSet-Methode ReadXml verwenden, um die Daten in ein DataSet zu übernehmen. Ihre XML-Daten befinden sich dort in der ersten DataTable.
Es gibt auch eine DataTable.ReadXml-Methode .
Sie können diesen Code verwenden (empfohlen)
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);
Dies ist ein anderer Weg, aber zuerst ex. ist empfohlen
StringWriter objSW = new StringWriter();
DataTable oDt = new DataTable();//Your DataTable which you want to convert
oDt.WriteXml(objSW);
string result = objSW.ToString();