帮忙 去读以下xml格式到table表
哪位帮忙提示下或者写下将以上格式的初中成绩数据读取到初中成绩表中..
我一直读取不出来,这个方法不知道怎么改
XmlNode root = doc.SelectSingleNode(doc.DocumentElement.Name); DataTable dt = new DataTable(); dt.TableName = "初中成绩"; //dt.Columns.Add(new DataColumn(root.ChildNodes[0].Attributes[0].Name, typeof(string))); XmlNode node_1_1 = doc.SelectSingleNode(doc.DocumentElement.Name + "/" + doc.DocumentElement.FirstChild.Name + "/" + doc.DocumentElement.FirstChild.FirstChild.Name); XmlNodeList nodelist_1_1 = node_1_1.ChildNodes; for (int i = 0; i < 2; i++) { dt.Columns.Add(new DataColumn(node_1_1.ChildNodes[i].Name, typeof(string))); } DataRow dr = dt.NewRow(); foreach (XmlNode xn in nodelist_1_1) { foreach (DataColumn column in dt.Columns) { if (xn.LocalName == column.ColumnName) { dr[column] = xn.InnerText.ToString().Trim(); dt.Rows.Add(dr); } } }
DataTable dt = new DataTable("初中成绩");
DataColumn Column = new DataColumn();
Column.ColumnName = "name";
Column.DataType = System.Type.GetType("System.String");
dt.Columns.Add(Column);
DataColumn Column1 = new DataColumn();
Column1.ColumnName = "Sage";
Column1.DataType = System.Type.GetType("System.Int32");
dt.Columns.Add(Column1);
DataColumn Column2 = new DataColumn();
Column2.ColumnName = "Ssex";
Column2.DataType = System.Type.GetType("System.String");
dt.Columns.Add(Column2);
DataColumn Column3 = new DataColumn();
Column3.ColumnName = "地理";
Column3.DataType = System.Type.GetType("System.Decimal");
dt.Columns.Add(Column3);
DataColumn Column4 = new DataColumn();
Column4.ColumnName = "物理";
Column4.DataType = System.Type.GetType("System.Decimal");
dt.Columns.Add(Column4);
DataColumn Column5 = new DataColumn();
Column5.ColumnName = "化学";
Column5.DataType = System.Type.GetType("System.Decimal");
dt.Columns.Add(Column5);
XElement xml = XElement.Load(@"./Student.xml");
//MesgBox.Show(dt.Columns.Count.ToString());
for (int i = 0; i < xml.Elements().Count(); i++)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < 3; j++)
{
dr[j] = xml.Elements().ElementAt(i).Attributes().ElementAt(j).Value;
}
for (int k = 0; k < 3; k++)
{
dr[k] = xml.Elements().ElementAt(i).Elements().Elements().ElementAt(k * 2 + 1).Value;
}
dt.Rows.Add(dr);
}
public static DataTable NodeTypes()
{
DataTable Table = new DataTable();
//DataRow row = Table.NewRow();
DataRow row;
int i = 0;
DataColumn dc = null;
dc = Table.Columns.Add("ID", Type.GetType("System.Int32"));
dc.AutoIncrement = true;//自动增加
dc.AutoIncrementSeed = 1;//起始为1
dc.AutoIncrementStep = 1;//步长为1
dc.AllowDBNull = true;//
dc = Table.Columns.Add("Couse", Type.GetType("System.String"));
dc = Table.Columns.Add("Score", Type.GetType("System.String"));
string xmlfile = @"~/成绩单.xml";
if (xmlfile.Length > 0)
{
XmlDocument xd = new XmlDocument();
xd.Load(xmlfile);
XmlNodeList list = xd.DocumentElement.ChildNodes;
foreach (XmlElement element in list)
{
if (element.Name.ToLower() == "file")
{
row = Table.NewRow();
row["Couse"] = Convert.ToString(element.Attributes["Couse"].InnerXml);
row["Score"] = Convert.ToString(element.Attributes["Score"].InnerXml);
Table.Rows.Add(row);
}
}
}
return Table;
}
string str = File.ReadAllText("D:\\lx.xml", Encoding.Default);
var ary = Regex.Matches(str, @"<ttt(?=.*?Sname=""(?<name>[^""]+)"")(?=.*?Sage=""(?<age>[^""]+)"")(?=.*?Ssex=""(?<sex>[^""]+)"").*?>(((?!</ttt>)[\s\S])*?(?<score><(?<xl>\w*?)成绩>[\s\S]*?</\w.*?成绩>))*[\s\S]*?</ttt>").Cast<Match>().Select(t => new
{
name = t.Groups["name"].Value,
age = t.Groups["age"].Value,
sex = t.Groups["sex"].Value,
xueli = t.Groups["xl"].Captures.Cast<Capture>().Select(tt => tt.Value).ToArray(),
score = t.Groups["score"].Captures.Cast<Capture>().Select(x => Regex.Matches(x.Value, @"<Course>(\w+)</Course>\s*<Score>(\d+(\.\d+)?)</Score>").Cast<Match>().Select(tt => new { 科目 = tt.Groups[1].Value, 成绩 = tt.Groups[2].Value }).ToArray()).ToArray()
}).ToArray();
const string CHEMISTRY = "化学";
const string PHYSICS = "物理";
const string GEOGRAPHY = "地理";
string tableName = "初中成绩";
string rootNode = "Student";
string nodeName = "ttt";
List<string> colNamesList = new List<string>();
colNamesList.Add(CHEMISTRY);
colNamesList.Add(PHYSICS);
colNamesList.Add(GEOGRAPHY);
DataTable dt = new DataTable();
dt.TableName = tableName;
dt.Columns.Add(CHEMISTRY, typeof(string));
dt.Columns.Add(PHYSICS, typeof(string));
dt.Columns.Add(GEOGRAPHY, typeof(string));
DataRow dr = null;
XDocument doc = XDocument.Load("TestData.xml");
var nodes = doc.Element(rootNode).Elements(nodeName);
foreach (var i in nodes.Elements(tableName))
{
dr = dt.NewRow();
foreach (var si in i.Elements())
{
if (colNamesList.Contains(si.Value))
{
dr[si.Value] = ((XElement)si.NextNode).Value;
}
}
dt.Rows.Add(dr);
}
WebService2.XML_WebService1 ws = new WebService2.XML_WebService1();
XmlDocument doc = new XmlDocument();
doc = ws.xd_GetM_Grade111();
XmlNode root = doc.SelectSingleNode(doc.DocumentElement.Name);
DataTable dt = new DataTable();
dt.TableName = "初中成绩";
//dt.Columns.Add(new DataColumn(root.ChildNodes[0].Attributes[0].Name, typeof(string)));
XmlNode node_1_1 = doc.SelectSingleNode(doc.DocumentElement.Name + "/" + doc.DocumentElement.FirstChild.Name + "/" + doc.DocumentElement.FirstChild.FirstChild.Name);
XmlNodeList nodelist_1_1 = node_1_1.ChildNodes;
for (int i = 0; i < 2; i++)
{
dt.Columns.Add(new DataColumn(node_1_1.ChildNodes[i].Name, typeof(string)));
}
DataRow dr = dt.NewRow();
foreach (XmlNode xn in nodelist_1_1)
{
foreach (DataColumn column in dt.Columns)
{
if (xn.LocalName == column.ColumnName)
{
dr[column] = xn.InnerText.ToString().Trim();
dt.Rows.Add(dr);
}
}
}
WebService2.XML_WebService1 ws = new WebService2.XML_WebService1();
XmlDocument doc = new XmlDocument();
doc = ws.xd_GetM_Grade111();
XmlNode root = doc.SelectSingleNode(doc.DocumentElement.Name);
DataTable dt = new DataTable();
dt.TableName = "初中成绩";
XmlNode node_1_1 = doc.SelectSingleNode(doc.DocumentElement.Name + "/" + doc.DocumentElement.FirstChild.Name + "/" + doc.DocumentElement.FirstChild.FirstChild.Name);
XmlNodeList nodelist_1_1 = node_1_1.ChildNodes;
for (int i = 0; i < 2; i++)
{
dt.Columns.Add(new DataColumn(node_1_1.ChildNodes[i].Name, typeof(string)));
}
DataRow dr = dt.NewRow();
foreach (XmlNode xn in nodelist_1_1)
{
foreach (DataColumn column in dt.Columns)
{
if (xn.LocalName == column.ColumnName)
{
dr[column] = xn.InnerText.ToString().Trim();
dt.Rows.Add(dr);
}
}
}
<Student>
<ttt Sname="李四 " Sage="15 " Ssex="女">
<初中成绩>
<Course>化学</Course>
<Score>77</Score>
<Course>地理</Course>
<Score>78</Score>
<Course>物理</Course>
<Score>88</Score>
</初中成绩>
</ttt>
<ttt Sname="王五" Sage="16" Ssex="男">
<初中成绩>
<Course>地理</Course>
<Score>87</Score>
<Course>物理</Course>
<Score>67</Score>
<Course>化学</Course>
<Score>89</Score>
</初中成绩>
</ttt>
<ttt Sname="张三 " Sage="14 " Ssex="男">
<初中成绩>
<Course>物理</Course>
<Score>70</Score>
<Course>化学</Course>
<Score>80</Score>
<Course>地理</Course>
<Score>90</Score>
</初中成绩>
</ttt>
</Student>
改为
for (int i = 0; i < xml.Elements().Count(); i++)
{
DataRow dr = dt.NewRow();
for (int j = 0; j < 3; j++)
{
dr[j] = xml.Elements().ElementAt(i).Attributes().ElementAt(j).Value;
}
for (int k = 3; k < 6; k++)
{
dr[k] = xml.Elements().ElementAt(i).Elements().Elements().ElementAt((k - 3) * 2+1).Value;
}
dt.Rows.Add(dr);
}
要是这个表有很多列的话,那不是要写很多重复代码,有没有什么可以遍历的
DataColumn Column = new DataColumn(); Column.ColumnName = "name"; Column.DataType = System.Type.GetType("System.String"); dt.Columns.Add(Column);
[其他解释]
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"c:\test.xml");
DataTable dt = new DataTable();
string[] columnNames = xmlDoc.SelectNodes(@"//Course").Cast<XmlNode>().Select(x => x.InnerXml).Distinct().ToArray();
foreach (string columnName in columnNames)
dt.Columns.Add(columnName, typeof(double));
XmlNodeList grades = xmlDoc.SelectNodes(@"//初中成绩");
foreach (XmlNode grade in grades)
{
DataRow row = dt.NewRow();
XmlNodeList courses = grade.SelectNodes(@"Course");
foreach (XmlNode course in courses)
{
int columnIndex = dt.Columns.IndexOf(course.InnerXml);
row[columnIndex] = course.NextSibling.InnerXml;
}
dt.Rows.Add(row);
}
[其他解释]
DataSet有一个方法LoadXml
[其他解释]
该回复于2012-11-28 09:18:08被管理员删除