从XDocument中删除节点
这将删除文档中的所有元素:
XDocument document = XDocument.Load(inputFile); foreach (XElement element in document.Elements()) { element.Remove(); } document.Save(outputFile);
这没有任何影响:
XDocument document = XDocument.Load(inputFile); foreach (XElement element in document.Elements()) { //element.Remove(); foreach (XElement child in element.Elements()) child.Remove(); } document.Save(outputFile);
我在这里错过了什么吗? 由于这些都是对XDocument中元素的引用,因此更改是否应该生效? 我还有其他方法可以从XDocument中删除嵌套的子项吗?
谢谢!
显然,当你遍历element.Elements()
,在其中一个子element.Elements()
调用Remove()
会导致枚举器yield break
。 迭代element.Elements().ToList()
修复了问题。
下面是使用System.Xml.XPath的另一种方法示例(更改xpath查询以满足您的需要):
const string xml = @" arkansas california virginia "; XDocument doc = XDocument.Parse(xml); doc.XPathSelectElements("//xml/country/states/state[.='arkansas']").ToList() .ForEach(el => el.Remove());; Console.WriteLine(doc.ToString()); Console.ReadKey(true);
使用XDocument
尝试以下方法:
XDocument document = XDocument.Load(inputFile); foreach (XElement element in document.Elements()) { document.Element("Root").SetElementValue(element , null); } document.Save(outputFile)
此致,托德