-1

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

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

我想要的只是删除现有文件中的一行,如果InnerText == TextBox. 例如:如果我将“Inception”文本放入文本框中并按下按钮,那么程序将删除带有“Inception”的行。我怎样才能做到这一点?我尝试了很多不同的方法。对我来说非常重要的是,我不想更改 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");
4

2 回答 2

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

如果我对你的问题理解得很糟糕,请告诉我。

祝你好运

于 2013-11-11T12:38:25.343 回答
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");
于 2013-11-13T09:23:06.740 回答