我发现了这个问题: How to remove an xml element from file? 如果您知道要删除的元素中的某些信息,那么这似乎工作正常。 但我在ASP.NET中有一个OnItemDeleting函数,我只有(我认为)ListView中项目的Selected Index。
在我的C#文件中,我已经定义了两个替代方案(A和B),如下所示,它看起来像这样:
System.Diagnostics.Debug.WriteLine("IN ON ITEM DELETING.");
ListView1.SelectedIndex = e.ItemIndex;
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(path);
XmlNodeList nodes = xmldoc.GetElementsByTagName("EmployeeInformation");
for (int i = 0; i < nodes.Count; i++)
{
if (i == ListView1.SelectedIndex)
{
nodes[i].RemoveChild(nodes[i]); // Alt. A
xmldoc.RemoveChild(nodes[i]); // Alt. B
break;
}
}
xmldoc.Save(path);
BindDatalist();
如果我尝试像A这样的东西,我不知道如何用XmlNodeList中的节点替换XmlDocument中的节点,如果我喜欢B,它就不起作用,也很奇怪。
XML文件如下所示:
<EmployeeInformation>
<Details>
<Name>Goofy</Name>
<Emp_id>Goooof</Emp_id>
<Qualification>BBA</Qualification>
</Details>
<Details>
<Name>Donald</Name>
<Emp_id>Duck</Emp_id>
<Qualification>MTech</Qualification>
</Details>
<Details>
<Name>Donald</Name>
<Emp_id>Trump</Emp_id>
<Qualification>MCA</Qualification>
</Details>
</EmployeeInformation>
因此,我想通过点击旁边的按钮删除唐纳德特朗普项目。 selectedIndex将为2。
答案 0 :(得分:0)
指定要从XlmNodeList删除的节点是父节点解决了问题:
ListView1.SelectedIndex = e.ItemIndex;
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(path);
XmlNodeList nodes = xmldoc.GetElementsByTagName("Details");
for (int i = 0; i < nodes.Count; i++)
{
if (i == e.ItemIndex)
{
nodes[i].ParentNode.RemoveChild(nodes[i]);
break;
}
}
xmldoc.Save(path);
BindDatalist();
答案 1 :(得分:0)
在你的情况下,不需要循环XmlNodeList。
试试这个
XmlDocument doc = new XmlDocument();
doc.Load(path);
if (ListView1.SelectedIndex < doc.DocumentElement.ChildNodes.Count)
{
doc.DocumentElement.RemoveChild(doc.DocumentElement.ChildNodes[ListView1.SelectedIndex]);
doc.Save(path);
}