我有一个XML文件,我想在Datatable中插入它。 xml文件的格式如下:
<userid ID="37729">
<TestId ID="84" TimeRemaining="60" />
<QuestId ID="1">
<Answer1>
</Answer1>
<Answer2>B</Answer2>
<Answer3>
</Answer3>
<Answer4>
</Answer4>
</QuestId>
</userid>
现在我想在下面的数据表中插入它:
Question Id Answer1 Answer2 Answer3 Answer4
1 A D
2 B C
3 C
任何人都可以帮助我实现这一目标。
答案 0 :(得分:14)
我首先使用您需要的列创建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 ...
}
答案 1 :(得分:12)
DataSet ds = new DataSet();
ds.ReadXml(fileNamePath);
答案 2 :(得分:2)
How To Read XML Data into a DataSet by Using Visual C# .NET包含一些细节。基本上,您可以使用重载的DataSet method ReadXml将数据导入DataSet。您的XML数据将位于第一个DataTable中。
答案 3 :(得分:1)
您可以使用此代码(推荐)
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();
答案 4 :(得分:-2)
也许这可能是一篇较旧的文章。但是上述答案必须在我需要的时候帮助我。然后我为此写了一个小片段。
这接受任何至少有3个级别的XML(如本示例所示):
<XmlData>
<XmlRow>
<XmlField1>Data 1</XmlField1>
<XmlField2>Data 2</XmlField2>
<XmlField3>Data 3</XmlField3>
.......
</XmlRow>
</XmlData>
public static class XmlParser
{
/// <summary>
/// Converts XML string to DataTable
/// </summary>
/// <param name="Name">DataTable name</param>
/// <param name="XMLString">XML string</param>
/// <returns></returns>
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<string> Valores = new List<string>();
foreach (XmlNode Columna in Fila.ChildNodes)
{
Valores.Add(Columna.InnerText);
}
Dt.Rows.Add(Valores.ToArray());
}
} catch(Exception)
{
}
return Dt;
}
}
这解决了我的问题