Обновите XML с использованием C# Linq

Если это было плохо, то, почему это функция на языке! Это имеет цель, и Вы нашли его.

я часто пишу код точно как в Вашем примере. Когда Вы хотите инициализировать переменную, и существует немного вычисления, для которого нужно выполнение для разработки то, чем это должно быть, и это включает несколько переменных... тогда, Вы не хотите те переменные, бродящие вокруг для всего объема Вашей функции, тогда немного объема для содержания инициализации работает отлично.

Мини-объемами является простой способ повредить код в 'абзацы'. Если Вы разделяете на методы, можно сделать код тяжелее для навигации, когда те методы ниоткуда еще не становятся названными и имеют последовательный вид порядка, в котором они должны быть выполнены.

Это всегда - баланс, но если Вы думаете, что будет самым легким поддержать, и это на самом деле увеличивает стоимость будущего читателя Вашего кода, если все встраивают, то пойдите для него.

нет никаких жестких правил. Я немного иногда устаю от коллег, которые чрезмерно поместили все в его собственный метод или класс или файл, и это становится кошмаром для навигации. Где-нибудь существует хороший баланс!

15
задан Rui Jarimba 17 October 2018 в 14:58
поделиться

2 ответа

Для обновления вашего xml используйте метод SetElementValue XElement:

var items = from item in xmlDoc.Descendants("item")
    where item.Element("itemID").Value == itemID
    select item;

foreach (XElement itemElement in items)
{
    itemElement.SetElementValue("name", "Lord of the Rings Figures");
}

EDIT: Да, я попробовал ваш example и сохраняет обновленные данные в файл. Сохраните обновленный xml с помощью метода Save в XDocument , вот код, который я пробовал:

string xml = @"<items>
           <item>
            <itemID>1</itemID>
            <isGadget>True</isGadget>
            <name>Star Wars Figures</name>
            <text1>LukeSkywalker</text1>
           </item>
        </items>";

XDocument xmlDoc = XDocument.Parse(xml);

var items = from item in xmlDoc.Descendants("item")
            where item.Element("itemID").Value == "1"
            select item;

foreach (XElement itemElement in items)
{
    itemElement.SetElementValue("name", "Lord of the Rings Figures");
}

xmlDoc.Save("data.xml");
19
ответ дан 1 December 2019 в 02:10
поделиться

Ваш запрос проецируется на анонимный тип. Если вы хотите просто изменить сами элементы, вам нужно что-то вроде:

var items = from item in xmlDoc.Descendants("item")
            where item.Element("itemID").Value == itemID
            select item;

Иначе известное как:

var items = xmlDoc.Descendants("item")
                  .Where(item => item.Element("itemID").Value == itemID);

Я предлагаю вам также вызвать ToList () , чтобы выполнялся весь запрос и результаты сохраняются в списке, прежде чем вы начнете изменять что-либо:

var items = xmlDoc.Descendants("item")
                  .Where(item => item.Element("itemID").Value == itemID)
                  .ToList();
4
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: