недавно у меня возник вопрос в этой ветке: Удалить атрибут узла Xml 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()
, он возвращает ошибку, например: «Ссылка на объект не установлена на экземпляр объекта» - Когда код внутри foreach равен
label1.Text=elem.Name.LocalName
, label1
отображает ServerSecurityPolicy
. Чтобы elem.Name.LocalName
работал нормально, а elem.Remove()
- нет? - Я пробовал
elem.RemoveNodes()
. Основываясь на описании void, я думаю, что код удалит все дочерние узлы (узлы SecurityMode), но он не работает (без ошибок, но просто не может ничего удалить). То же самое с elem.RemoveAll()
. Вы можете сказать мне, сделал ли я что-нибудь не так? Спасибо