Сейчас поговорим о том, как средствами c# осуществить удаление требуемого элемента из структуры xml файла. О том, как производить чтение данных из xml файла рассматривается в статье чтение xml
Для начала определимся со структурой и данными в исходном xml файле:
Person.xml
<?xml version="1.0" encoding="utf-8"?>
<PEOPLE>
<Man>
<name>Саша</name>
<surName>Гудок</surName>
<Country>Украина</Country>
</Man>
<Man>
<<name>Андрей</name>
<surName>Нагорный</surName>
<Country>Словакия</Country>
</Man>
<Man>
</PEOPLE>
Данный фай содержит информацию о персонах (фамилия, имя и страна проживания).
Договоримся, что пути к файлам содержатся в конфигурационном файле (для web-приложения web.config, для windows forms приложения – app.config):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="path" value="..\..\Person.xml"/>
</appSettings>
</configuration>
Значит, для получения пути к исходному файлу используем класс ConfigurationSettings (или более старый ConfigurationManager)
static string path =
ConfigurationSettings.AppSettings["path"].ToString();
И не забываем подключить требуемые пространства имен:
using System.IO;
using System.Xml;
using System.Configuration;
Сам же метод удаления персоны из xml-файла выглядит так:
internal static void DeletePerson(string name, string surName)
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
XmlNode root = doc.DocumentElement;
XmlNode node = root.SelectSingleNode(
String.Format("Man[name='{0}' and surName='{1}']",
name, surName));
XmlNode outer = node.ParentNode;
outer.RemoveChild(node);
doc.Save(path);
}
Таким образом, используя данные об имени и фамилии персоны мы успешно удаляем её.
Обратите внимание, что для поиска элемента (node), содержащего искомые данные, мы воспользовались методом SelectSingleNode, передав в него стринговый параметр XPath-выражения. Данный метод выбирает первый xml-элемент, для которого удовлетворяется совпадение, назначенное XPath выражением.
Само же удаление элемента происходит из родительского с помощью метода RemoveChild.
И в конце не забудьте сохранить изменения в исходном документе методом XmlDocument.Save().