删除XML元素

时间:2013-11-11 12:17:44

标签: c# xml

我有一个像这样的XML文件:

<position>
    <Game> Batman Arkham City </Game>
    <Movie> Inception   </Movie>
    <Movie> Dark Knight </Movie>
    [etc...]
</position>

我想要的只是删除现有文件中的一行,如果是InnerText == TextBox。例如:如果我将“初始”文本放入文本框并按下按钮,则程序将删除“初始化”行。我怎样才能做到这一点?我尝试了很多不同的方式。对我来说非常重要的是,我不想更改XML文件的格式,因为我已经为其他选项创建了代码,例如将项目输入到列表框中,或者在当前XML文件中创建新标题。

你能说出我该怎么做?


编辑(来自评论):我上次尝试这样做:

XmlDocument dok = new XmlDocument();
dok.Load("DataBase/list.xml");
foreach(XmlNode node in dok.SelectNodes("position"))
{
    if (node.SelectSingleNode("Game").InnerText == searchTxt.Text)
    {
        node.RemoveChild(node);
    }
}

dok.Save("DataBase/list.xml");

2 个答案:

答案 0 :(得分:0)

using (var reader = new StringReader(xml))
            {
                var element = XElement.Load(reader);

                var toBeRemovedElements = element.Elements().Where(e => e.Value == parameter).ToList();

                toBeRemovedElements.ForEach(e => e.Remove());
            }

如果我非常理解你的问题,请告诉我。

祝你好运

答案 1 :(得分:0)

您正在尝试从节点中删除节点,但这不起作用。从父节点dok。

中删除节点
XmlDocument dok = new XmlDocument();
dok.Load("DataBase/list.xml");
foreach(XmlNode node in dok.SelectNodes("position"))
{
    if (node.SelectSingleNode("Game").InnerText == searchTxt.Text)
    {
        dok.RemoveChild(node);
    }
}

dok.Save("DataBase/list.xml");