Мне нужна функция, которая может удалить все дочерние узлы определенного узла. Но только дочерние узлы, а не атрибуты. В System.XML есть стандартная функция для удаления всех дочерних элементов, но она также удаляет все атрибуты, которые у меня есть.Xml Удалить дочерние элементы, но не атрибуты
В результате я пишу свое собственное funcrtion, которое принимает в качестве параметров xmlDocument, мой родительский узел (сектор) и переменную bool toRemoveAttributes. В этом случае я беру все атрибуты в один XmlAttributeCollection, а затем использую функцию RemoveAll.
public void RemoveChild(XmlDocument xd, string sectorName, bool removeAttributes)
{
XmlElement sector;
if (sectorName == "root")
sector = xd.DocumentElement;
else
sector = (XmlElement)xd.GetElementsByTagName(sectorName)[0];
XmlAttributeCollection atr = sector.Attributes;
sector.RemoveAll();
if(!removeAttributes)
{
for (int i = 0; i < atr.Count; i++)
sector.SetAttribute(atr[i].Name, atr[i].Value);
}
}
В результате мои атрибуты по-прежнему удаляются. Когда я отлаживал свой код, я увидел, что после RemoveAll() также все удалено из моего 'atr' colection.