Я хочу отредактировать xml-файл

альтернативный текст

Я изменил структуру файла d xml. я хочу изменить значение visible


person user428747    schedule 17.11.2010    source источник
comment
Вам нужно расширить этот вопрос с помощью образца XML (до и после изменения), чтобы получить достойный ответ.   -  person Steve Townsend    schedule 17.11.2010
comment
Предоставленный образец XML недействителен. Теги c и d не имеют закрывающей скобки.   -  person Scott Markwell    schedule 17.11.2010
comment
@ Скотт - и второй «б» нет   -  person KevinDTimm    schedule 17.11.2010
comment
это пример структуры, проблема в том, что я не могу изменить значение атрибута с aaa на bb   -  person user428747    schedule 17.11.2010
comment
@user428747: user428747: Это не пример действительного XML-файла, из-за чего трудно сказать, как будет выглядеть правильный файл.   -  person Jon Skeet    schedule 17.11.2010


Ответы (2)


Вы можете использовать такой шаблон кода:

bool foobar()
    {
        XmlDocument doc = new XmlDocument();
        try
        {
            doc.Load(FileName);
            XmlNodeList ns = doc.SelectNodes("a/d/e/f");
            if (ns.Count == 1)
            {

                    ns[0].Attributes["visible"].Value = true;
                    doc.Save(FileName);
                    return (true);
            }
            else
                return (false);
        }
        catch (Exception e)
        {
            return (false);
        }
    }
person texnedo    schedule 17.11.2010
comment
Использование true/false вместо исключений — это весьма неидиоматический (и с потерями) способ указать на успех или неудачу в .NET. Исключения существуют не просто так - используйте их! - person Jon Skeet; 18.11.2010
comment
Вы имеете в виду, что я должен заполнить исключение для родительского кода? А что с производительностью в этой ситуации? - person texnedo; 19.11.2010

Итак, LINQ to XML позволяет очень легко манипулировать XML-документами, при условии, что они достаточно малы для разумной загрузки в память.

Например:

var doc = XDocument.Load("Foo.xml");
foreach (var element in doc.Descendants("c"))
{
    element.SetAttributeValue("value", "bb");
}
doc.Save("Bar.xml");

Теперь это установит атрибут value для каждого элемента c. Непонятно, хотите ли вы этого. Если это не так, отредактируйте свой вопрос, чтобы сделать его более конкретным.

person Jon Skeet    schedule 17.11.2010
comment
На самом деле, чтобы он работал (SetAttribute не существует), используйте этот код: element.SetAttributeValue(value, bb); - person SwissCoder; 23.11.2010
comment
Невероятно, я нашел ошибку Джона Скита :) - person SwissCoder; 23.11.2010