根据子索引删除XML元素

时间:2017-03-16 00:41:01

标签: c# xml

我发现了这个问题: 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。

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);
            }