Увеличьте xml с помощью С#

Хорошо, поэтому я столкнулся с привязкой к своей работе. У меня есть XML-документ, который я пытаюсь изменить. Значение должно меняться каждый раз при загрузке файла. Итак, в основном, когда файл A заканчивает загрузку, version.xml имеет идентификатор, который я хочу изменить с «0» на «1». Теперь с этим я могу, наконец, настроить свой лаунчер так, как я хочу, чтобы он был здесь кодом, который у меня есть.

private void GetNextNodeID()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(@"version.xml");
        var x = doc.GetElementsByTagName("Product");
        int Max = 0;



        Max++
        XmlElement newElement = doc.CreateElement("Product");
        newElement.SetAttribute("id", Max.ToString());

        doc.Save(@"version.xml");

    }

также вот xml документ

<Table>
<Product>
<Product>0</Product>
<Product_name>Vitare</Product_name>
<Product_version>1.0.0.1</Product_version>
</Product>
</Table>

Теперь по какой-то причине код никогда не связывается с файлом xml, пожалуйста, помогите мне понять, как увеличить значение !!!!!!!!!

Спасибо, Девин Магаро.


person Devin Magaro    schedule 23.07.2013    source источник
comment
Приведенный вами код даже не компилируется...   -  person Jon Skeet    schedule 24.07.2013
comment
@Devin Magaro пропал ; после Max++   -  person Mechanical Object    schedule 24.07.2013
comment
я использовал то, что дал мне Джон Скит, и это дает мне необработанное исключение типа «System.Reflection.TargetInvocationException» в mscorlib.dll. Дополнительная информация: Исключение было сгенерировано целью вызова.   -  person Devin Magaro    schedule 24.07.2013


Ответы (1)


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

Предполагая, что вы действительно просто хотите обновить элемент, я бы лично использовал LINQ to XML вместо XmlDocument:

var doc = XDocument.Load("version.xml");
// Single() ensures there's only one such element
var element = doc.Descendants("Product").Single(); 
int currentValue = (int) element;
element.SetValue(currentValue + 1);
doc.Save("version.xml");

Если вы хотите обновить все элементы Product, вам следует выполнить цикл по doc.Descendants("Product") с помощью цикла foreach.

person Jon Skeet    schedule 23.07.2013
comment
Теперь, когда я запускаю код и моя загрузка заканчивается, я получаю сообщение об ошибке. Необработанное исключение типа «System.Reflection.TargetInvocationException» произошло в mscorlib.dll. Дополнительная информация: Исключение было вызвано целью вызова. Это происходит, когда я вызываю частную пустоту после завершения загрузки. - person Devin Magaro; 24.07.2013
comment
он также указывает на Application.Run(new form1()); когда выскакивает ошибка - person Devin Magaro; 24.07.2013
comment
@Devin Magaro Проблема, с которой вы столкнулись, не имеет ничего общего с кодом Джона Скита, но, очевидно, вы пытаетесь отобразить эти данные в WinForms. Вы можете посмотреть @это. С другой стороны, код Джона не будет работать с XML-файлом, который вы предоставили, у вас, вероятно, будет ошибка типа Sequence contains more than one element , так как вы дважды определяете тег <Product>. Попробуйте дать внешнему тегу другое имя (что-то вроде <Products>. - person Mechanical Object; 24.07.2013