1
XMLファイルが複数あり、複数のテーブルがあり、xmlファイルの特定のテーブルの最後に新しいノードを追加しようとしています。ユーザーはテーブルを選択し、データをDataGridView
に入力します。xmlファイル内の特定の場所にノードを追加する方法
<?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 !!");
}
XML構造が正しいですか? '
答えて
ここに問題があるようです。
あなたは
child[k]'s
内部テキストではなく、あなたが作成したnode
の値を設定しています。変更
child[k]
node
へのあなたのタイトルは、特定の場所でノードを配置することが求められますが、あなたのコードがそれをやっていません。 parentNode.InsertAfter(newNode, refNode)メソッドを使用する必要があります。だから、
root.AppendChild(element);
の代わりに。ノードの最後にはroot.InsertAfter(element, child[child.Count - 1])
を使用して、最後に設定した子タイプの後に新しいノードを配置します。AppendChild MSDNドキュメント。
出典
2016-05-07 20:06:20
あなたの答えに感謝しましたが、ノードは
@SaraAshrafええ、そうです。これは 'k'が' for'ループ変数であるからです。そして、 'for'ループの外側で' k'を使用しようとしていました。これはおそらく 'child [child.Count-1]' –
関連する問題