如何在 C# 中从 XML 中删除选定的节点?
Posted
技术标签:
【中文标题】如何在 C# 中从 XML 中删除选定的节点?【英文标题】:How to delete selected node from XML in C#? 【发布时间】:2012-10-08 12:31:15 【问题描述】:我是 C# 新手我有问题...
我想从我的XMl
文件中删除selected node
在这里,我只是尝试使用此代码,但没有得到任何人的帮助
private void btnDelete_Click(object sender, EventArgs e)
xdoc.Load(strFilename);
string Xpath = string.Format("root/0/1",_strProCat,_strProdType);
xdoc.SelectSingleNode(Xpath).RemoveAll();
xdoc.Save(strFilename);
MessageBox.Show("Deleted Successfully");
这是我的 Xml 文件
<root>
<product category="Soaps">
<product type="Washing">
<product name="Rin">
<Id>100</Id>
<AvailProducts>30</AvailProducts>
<Cost>20.00</Cost>
</product>
<product name="Tide">
<Id>101</Id>
<AvailProducts>30</AvailProducts>
<Cost>15.00</Cost>
</product>
</product>
</product>
</root>
我只想删除 Node 哪个产品name="Tide"
【问题讨论】:
xdoc
是哪个类型,_strProCat
和_strProdType
的值是什么?
您能告诉我如何在 XML 文件中添加 ID 吗?使用新记录自动 +1
【参考方案1】:
您可以简单地使用以下代码:
private void btnDelete_Click(object sender, EventArgs e)
var xDoc = XDocument.Load(strFilename);
foreach (var elem in xDoc.Document.Descendants("product"))
foreach (var attr in elem.Attributes("name"))
if (attr.Value.Equals("Tide"))
elem.RemoveAll();
xDoc.Save(destinationFilename);
MessageBox.Show("Deleted Successfully");
快乐编码...
【讨论】:
【参考方案2】:应该这样做:
xdoc.Elements("product").Where(x=> x.Element("name").Value == "Tide").FirstOrDefault().Remove();
【讨论】:
【参考方案3】:如果你想要XPath
和XmlDocument
,那么下面就是这样做的方法..
XmlDocument xdoc = new XmlDocument();
xdoc.Load(strFilename);
string Xpath = string.Format("root/product[@category='0']/product[@type='1']/product[@name='2']", "Soaps", "Washing", "Tide");
xdoc.SelectSingleNode(Xpath).RemoveAll();
xdoc.Save(strFilename);
更新
根据您的要求To Remove the empty node
,尝试以下代码将空节点删除为
XmlNodeList emptyElements = xdoc.SelectNodes(@"//*[not(node())]");
for (int i = emptyElements.Count - 1; i > -1; i--)
XmlNode nodeToBeRemoved = emptyElements[i];
nodeToBeRemoved.ParentNode.RemoveChild(nodeToBeRemoved);
现在你的最终完整代码将如下所示
string Xpath = string.Format("root/product[@category='0']/product[@type='1']/product[@name='2']", "Soaps", "Washing", "Tide");
xdoc.SelectSingleNode(Xpath).RemoveAll();
XmlNodeList emptyElements = xdoc.SelectNodes(@"//*[not(node())]");
for (int i = emptyElements.Count - 1; i > -1; i--)
XmlNode nodeToBeRemoved = emptyElements[i];
nodeToBeRemoved.ParentNode.RemoveChild(nodeToBeRemoved);
xdoc.Save(strFilename);
【讨论】:
它会正常工作但是在这段代码中我遇到了一个问题以上是关于如何在 C# 中从 XML 中删除选定的节点?的主要内容,如果未能解决你的问题,请参考以下文章
如何在C#中从Treeview的选定节点获取下一个直接节点?