Как изменить конкретный XElement в файл .xml - PullRequest
0 голосов
/ 02 октября 2019

Я играю с xml и c # wpf, я хочу искать в простом файле xml и модифицировать определенный XElement каждый раз, когда я его находил. Вместо того, что содержится в этой строке, я хочу поместить все, что я пишу в текстовое поле, фактический код таков, и на данный момент мне удалось только как изменить один конкретный элемент

private void Button_Click(object sender, RoutedEventArgs e)
    {
        string xmlFilePath = @"C:\Users\codroipomad\Desktop\slave\Test.xml";
        XDocument xdoc = XDocument.Load(xmlFilePath);
        XNamespace ns = "http://www.fruitauthority.fake";

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

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

        //check se il file esiste,se non esiste lo crea
        if (!File.Exists(xmlFilePath))
        {
            File.Create(xmlFilePath).Dispose();

            if (elColor != null)
            {
                elColor.Value = box.Text;
            }
        }
        //se il file esiste setta il colore con valore pari al valore della textbox
        else if (File.Exists(xmlFilePath))
        {
            if (elColor != null)
            {
                elColor.Value = box.Text;
            }
        }

        xdoc.Save(xmlFilePath);
    }

xml, которыйЯ использую это (я вставил его как фрагмент HTML, потому что я нашел только такой способ показать это вам)

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

В этом случае я просто хочу изменить всеFruitColor THA ПРОГРАММА МОЖЕТ НАЙТИ

1 Ответ

1 голос
/ 02 октября 2019

Таким образом, чтобы обновить все цвета банана до желтого, используйте этот код:

        string xmlFilePath = @"C:\Users\codroipomad\Desktop\slave\Test.xml";
        XDocument xdoc = XDocument.Load(xmlFilePath);
        XNamespace ns = "http://www.fruitauthority.fake";

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

        foreach (var item in elBanana)
        {
            var elColor = item.Elements(ns + "FruitColor").FirstOrDefault();

            //check se il file esiste,se non esiste lo crea
            if (!File.Exists(xmlFilePath))
                File.Create(xmlFilePath).Dispose();

            if (elColor != null)
            {
                elColor.Value = "YELLOW";
            }

        }

        xdoc.Save(xmlFilePath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...