【发布时间】:2020-08-05 04:51:51
【问题描述】:
最近我在这个帖子中有一个问题:Delete Attribute of Xml node c#
同样,我正在努力修改 xml 文件。
这是xml:
<ApplicationConfiguration>
<ServerConfiguration>
<SecurityPolicies>
<ServerSecurityPolicy>
<SecurityMode>None_1</SecurityMode>
</ServerSecurityPolicy>
<ServerSecurityPolicy>
<SecurityMode>None_2</SecurityMode>
</ServerSecurityPolicy>
</SecurityPolicies>
</ServerConfiguration>
</ApplicationConfiguration>
我想要的是删除所有 ServerSecurityPolicy 节点,所以结果将是:
<ApplicationConfiguration>
<ServerConfiguration>
<SecurityPolicies>
</SecurityPolicies>
</ServerConfiguration>
</ApplicationConfiguration>
然后我使用这个代码:
string docaddress = "D:\\abc.xml";
XDocument doc = XDocument.Load(docaddress);
var root = doc.Root;
var these = root.Descendants().Where(p => p.Name.LocalName == "ServerSecurityPolicy");
foreach (var elem in these)
{
elem.Remove();
}
doc.Save(docaddress);
问题来了:
- 当 foreach 中的代码为
elem.Remove()时,它会返回类似的错误:'Object reference not set to an instance of an object' - 当foreach 中的代码为
label1.Text=elem.Name.LocalName时,label1显示ServerSecurityPolicy。这样elem.Name.LocalName可以正常工作,而elem.Remove()不行? - 我试过
elem.RemoveNodes()。根据 void 描述,我认为代码将删除所有子节点(SecurityMode 节点),但它不起作用(没有错误,但不能删除任何东西)。与elem.RemoveAll()相同。
如果我做错了什么,你能告诉我吗?谢谢
【问题讨论】:
-
由于您不是简单地从您循环的集合中删除项目,我不确定“使用 for 循环”是否有效。
标签: c# linq-to-xml