首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除节点及其子节点

删除节点及其子节点
EN

Stack Overflow用户
提问于 2013-10-12 22:07:08
回答 2查看 180关注 0票数 1

我想从XML文件中删除一个节点。

以下是XML文件的样子。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<MovieData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Movie>
    <Name>Death Race</Name>
    <Type>Action</Type>
    <Type>Adventure</Type>
    <Rating>R</Rating>
    <Disk>Blu-Ray</Disk>
  </Movie>
  <Movie>
    <Name>Movie to be deleted</Name>
    <Type>Action</Type>
    <Type>Adventure</Type>
    <Rating>R</Rating>
    <Disk>Blu-Ray</Disk>
  </Movie>
  <Movie>
    <Name>Death Race 2</Name>
    <Type>Action</Type>
    <Type>Adventure</Type>
    <Rating>R</Rating>
    <Disk>Blu-Ray</Disk>
    <Time>time</Time>
  </Movie>
</MovieData>

我想这样结束。

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<MovieData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Movie>
    <Name>Death Race</Name>
    <Type>Action</Type>
    <Type>Adventure</Type>
    <Rating>R</Rating>
    <Disk>Blu-Ray</Disk>
    <Time>time</Time>
  </Movie>
  <Movie>
    <Name>Death Race 2</Name>
    <Type>Action</Type>
    <Type>Adventure</Type>
    <Rating>R</Rating>
    <Disk>Blu-Ray</Disk>
    <Time>time</Time>
  </Movie>
</MovieData>

这就是我到目前为止所拥有的。不过,这只会删除子节点。它不会删除节点。

代码语言:javascript
运行
复制
XmlDocument doc = new XmlDocument();
doc.Load(movieListXML);
XmlNode node = doc.SelectSingleNode("/MovieData");
foreach (XmlNode movie in node.SelectNodes("Movie"))
{
    if (movie != null)
    {
        if (name == movie["Name"].InnerText)
        {
            if ((this checks the data to make sure it is the one to be deleted))
            {
                movie.RemoveAll();
                doc.Save(movieListXML);
                return;
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-12 22:10:31

尝试使用XmlNode.RemoveChild

代码语言:javascript
运行
复制
node.RemoveChild(movie);
票数 3
EN

Stack Overflow用户

发布于 2013-10-12 22:21:02

您也可以使用LINQ来完成它。例如,做这样的事情:

代码语言:javascript
运行
复制
var xDoc = XDocument.Load(xmlFile);

var movie = xDoc.Descendants("Movie")
    .FirstOrDefault(e => e.Element("Name").Value == "Movie to be deleted");

if (movie != null) {
    movie.Remove();
}

xDoc.Save(xmlFile);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19339707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档