Looking for c# Keywords? Try Ask4Keywords

C# Language Изменение файла XML


пример

Чтобы изменить файл XML с помощью XDocument , вы загружаете файл в переменную типа XDocument , модифицируете его в памяти, а затем сохраняете, перезаписывая исходный файл. Общей ошибкой является изменение XML в памяти и ожидание изменения файла на диске.

Учитывая XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<FruitBasket xmlns="http://www.fruitauthority.fake">
  <Fruit>
    <FruitName>Banana</FruitName>
    <FruitColor>Yellow</FruitColor>
  </Fruit>
  <Fruit>
    <FruitName>Apple</FruitName>
    <FruitColor>Red</FruitColor>
  </Fruit>
</FruitBasket>

Вы хотите изменить цвет банана на коричневый:

  1. Нам нужно знать путь к файлу на диске.
  2. Одна перегрузка XDocument.Load получает URI (путь к файлу).
  3. Поскольку XML-файл использует пространство имен, мы должны запросить имя пространства имен AND.
  4. Запрос Linq, использующий синтаксис C # 6 для размещения нулевых значений. Каждый . используемый в этом запросе, может возвращать нулевой набор, если условие не находит элементов. До C # 6 вы сделали бы это несколькими шагами, проверяя нуль на этом пути. Результатом является элемент <Fruit> который содержит Банану. На самом деле IEnumerable<XElement> , поэтому на следующем шаге используется FirstOfDefault() .
  5. Теперь мы извлекаем элемент FruitColor из элемента Fruit, который мы только что нашли. Здесь мы предполагаем, что есть только один, или мы заботимся только о первом.
  6. Если это не null, мы устанавливаем FruitColor в «Brown».
  7. Наконец, мы сохраняем XDocument , перезаписывая исходный файл на диске.
// 1.
string xmlFilePath = "c:\\users\\public\\fruit.xml";

// 2.
XDocument xdoc = XDocument.Load(xmlFilePath);

// 3.
XNamespace ns = "http://www.fruitauthority.fake";

//4. 
var elBanana = xdoc.Descendants()?.
    Elements(ns + "FruitName")?.
    Where(x => x.Value == "Banana")?.
    Ancestors(ns + "Fruit");

// 5.
var elColor = elBanana.Elements(ns + "FruitColor").FirstOrDefault();

// 6.
if (elColor != null)
{
    elColor.Value = "Brown";
}

// 7.
xdoc.Save(xmlFilePath);

Теперь файл выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<FruitBasket xmlns="http://www.fruitauthority.fake">
  <Fruit>
    <FruitName>Banana</FruitName>
    <FruitColor>Brown</FruitColor>
  </Fruit>
  <Fruit>
    <FruitName>Apple</FruitName>
    <FruitColor>Red</FruitColor>
  </Fruit>
</FruitBasket>