我有一个这样的XML文件,其中有多个表,我试图在xml文件的特定表的末尾添加一个新节点。用户将选择该表并将其数据输入DataGridView
。
<?xml version="1.0" encoding="UTF-8"?>
<table name="emloyees">
<emloyees>
<emp_num>employee 1</emp_num>
<department>sales</department>
<salary>1000</salary>
</employees>
<employees>
<emp_num>employee 2</emp_num>
<department>IT</department>
<salary>2000</salary>
</employees>
((for example I want to add new employees node here))
<table name="projects">
<projects>
<proj_num>project 1</proj_num>
<name>hosbital system</name>
<num_mempers>5 members</num_mempers>
</projects>
<projects>
<proj_num>project 2</proj_num>
<name>library system</name>
<num_mempers>4 members</num_mempers>
</projects>
</table>
</table>
我编写了这段代码,但不是插入新节点,而是使用新节点替换表的最后一个节点。我该如何解决这个问题?
private void button4_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load("Data.xml");
string tablename = comboBox1.SelectedItem.ToString();
XmlNodeList row = doc.GetElementsByTagName(tablename);
int c = row.Count;
for (int j = 0; j < dataGridView1.Rows.Count - 1; j++)
{
XmlNodeList child = row[c - 1].ChildNodes;
XmlElement element = doc.CreateElement(tablename);
for (int k = 0; k < child.Count; k++)
{
XmlElement node = doc.CreateElement(child[k].ToString());
child[k].InnerText = dataGridView1.Rows[j].Cells[k].Value.ToString();
element.AppendChild(node);
}
XmlElement root = doc.DocumentElement;
root.AppendChild(element);
doc.Save("Data.xml");
}
dataGridView1.Rows.Clear();
MessageBox.Show("Successfully Added !!");
}
答案 0 :(得分:0)
问题似乎就在这里。
for (int k = 0; k < child.Count; k++)
{
XmlElement node = doc.CreateElement(child[k].ToString());
child[k].InnerText = dataGridView1.Rows[j].Cells[k].Value.ToString(); // < here
element.AppendChild(node);
}
您正在设置child[k]'s
内部文字,而不是您创建的node
的值。
将child[k]
更改为node
node.InnerText = dataGridView1.Rows[j].Cells[k].Value.ToString();
您的标题要求将节点放在特定位置,但您的代码没有这样做。您需要使用parentNode.InsertAfter(newNode, refNode)方法。
而不是root.AppendChild(element);
。这将节点放在文件的底部,使用root.InsertAfter(element, child[child.Count - 1])
将新节点放在您正在设置的最后一个子类型之后。
AppendChild MSDN文档。