将Xml转换为DataTable

我有一个XML文件,我想在Datatable中插入它。 xml文件的格式如下:

     B       

现在我想在下面的数据表中插入它:

 Question Id Answer1 Answer2 Answer3 Answer4 1 AD 2 BC 3 C 

任何人都可以帮助我实现这一目标。

我首先使用您需要的列创建一个DataTable ,然后通过Linq-to-XML填充它。

您可以使用Select查询创建表示每行的对象,然后使用标准方法为每个项创建DataRows …

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

如何使用Visual C#.NET将XML数据读入DataSet包含一些细节。 基本上,您可以使用重载的DataSet方法ReadXml将数据导入DataSet。 您的XML数据将位于第一个DataTable中。

还有一个DataTable.ReadXml方法 。

你可以使用这段代码(推荐)

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

这是另一种方式,但首先是前。 被推荐

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

也许这可能是一篇较旧的文章。 但是上述答案必须在我需要的时候帮助我。 然后我为此写了一个小片段。

这接受任何至少有3个级别的XML(如本示例所示):

   Data 1 Data 2 Data 3 .......   public static class XmlParser { ///  /// Converts XML string to DataTable ///  /// DataTable name /// XML string ///  public static DataTable BuildDataTableFromXml(string Name, string XMLString) { XmlDocument doc = new XmlDocument(); doc.Load(new StringReader(XMLString)); DataTable Dt = new DataTable(Name); try { XmlNode NodoEstructura = doc.FirstChild.FirstChild; // Table structure (columns definition) foreach (XmlNode columna in NodoEstructura.ChildNodes) { Dt.Columns.Add(columna.Name, typeof(String)); } XmlNode Filas = doc.FirstChild; // Data Rows foreach (XmlNode Fila in Filas.ChildNodes) { List Valores = new List(); foreach (XmlNode Columna in Fila.ChildNodes) { Valores.Add(Columna.InnerText); } Dt.Rows.Add(Valores.ToArray()); } } catch(Exception) { } return Dt; } } 

这解决了我的问题