Чтение / запись / изменение XML

У меня есть такой XML-файл

<?xml version="1.0" encoding="utf-8" ?>

    <Configurations>

            <EmailConfiguration>
                <userName>xxxx</userName>
                <password>xxx</password>
                <displayName>xxxxx</displayName>
                <hostAddress>xxxx</hostAddress>
                <sslEnable>xxx</sslEnable>
                <port>xxx</port>
            </EmailConfiguration>

            <LogConfiguration>
                <logEnable>true</logEnable>
                <generalEnable>true</generalEnable>
                <warningEnable>true</warningEnable>
                <errorEnable>true</errorEnable>
            </LogConfiguration>

        </Configurations>

и я использую его в качестве файла конфигурации для моего кода, и я хочу получить их значения (innerText), как это

bool logEnable = value comes from XML (logEnable)
bool warningEnable = value comes from XML (warningEnable)
bool errorEnable = value comes from XML (errorEnable)
bool generalEnable = value comes from XML (generalEnable)

Итак, как я могу прочитать их значения, чтобы назначить их логическим переменным, и если бы я хотел изменить одно из их значений на false, как бы я мог это сделать?

Спасибо...

С уважением...

PS: Если бы вы написали больше пояснительных кодов, это было бы очень ценно.

Еще раз спасибо...

11.12.2008 18:40:26
3 ОТВЕТА
РЕШЕНИЕ
public class Options
{
    public string UserName { get; set; }
    public string Password { get; set; }
    public string DisplayName { get; set; }
    public string HostAddress { get; set; }
    public bool SSL { get; set; }
    public string Port { get; set; }

    public bool LogEnable { get; set; }
    public bool GeneralEnable { get; set; }
    public bool WarningEnable { get; set; }
    public bool ErrorEnable { get; set; }

    public static Options Load(string path)
    {
        Options options = new Options();
        XmlDocument xml = new XmlDocument();
        xml.Load(path);

        XmlNodeReader input = new XmlNodeReader(xml);

        while (input.Read())
        {
            var elementname = input.Name.ToLower();

            switch (elementname)
            {
                case "username":
                    options.UserName = input.Value;
                    break;
                // all other cases
                case "logenable":
                    options.LogEnable = Boolean.Parse(input.Value);
                    break;
                // continue with other cases
            }
        }
    }

    public static void Save(Options options, string path)
    {
        XmlTextWriter writer = new XmlTextWriter(path);

        xmlWriter.WriteStartDocument(true);
        xmlWriter.WriteStartElement("configuration");
        xmlWriter.WriteStartElement("emailConfiguration");

        xmlWriter.WriteStartElement("userName");
        xmlWriter.WriteString(options.UserName);
        xmlWriter.WriteEndElemement();

        // continue for all elements

        xmlWriter.WriteEndElement();
        xmlWriter.WriteStartElement("logConfiguration");

        xmlWriter.WriteStartElement("logEnable");
        xmlWriter.WriteString(options.LogEnable.ToString());
        xmlWriter.WriteEndElemement();

        // continue for all elements

        xmlWriter.WriteEndElement();
        xmlWriter.WriteEndElement();

        xmlWriter.Close();
    }
}

Я оставил некоторую работу для вас;) Кроме того, я не писал, что это Visual Studio, и я не компилировал ее заранее. Этот код предоставляется как есть без каких-либо гарантий. ;)

Это базовый процесс чтения / записи XML в .NET, хотя есть много вариантов. Вы можете использовать запросы XPath, или, если вы используете .NET 3.5, вы можете использовать Linq to Sql, что даст вам уличную репутацию среди крутых ребят. Но приведенный выше пример поможет вам быстро приступить к работе, просто пообещайте, что вы тоже поработаете над этими другими вещами, и вам это будет лучше.

5
11.12.2008 19:11:22
Спасибо, я собираюсь провести некоторое исследование прямо сейчас :) спасибо за помощь.
Tarik 11.12.2008 19:19:22

Лучше всего использовать файл web.config или app.config. Это также значительно облегчает этот процесс.

1
11.12.2008 19:14:39
Да, он может засорять свои appSettings этими значениями, правда, это проще. Создание пользовательского раздела конфигурации не проще. Но его основной вопрос был о чтении и записи файлов XML. Не следует использовать XML-файлы. И чтение и запись XML - это хорошая вещь для понимания.
NerdFury 11.12.2008 19:25:59
Может быть, но когда я изменил какое-либо значение, они сказали, что мне нужно перезапустить приложение, чтобы позже это стало проблемой.
Tarik 11.12.2008 19:28:10
если вы изменяете настройки во время работы приложения, все, что вам нужно сделать, это обновить app.config. если я помню, это что-то вроде refreshsection.applicationsettings, я просто использовал эту технику в приложении для создания видео-плеера
Ironsides 12.12.2008 19:14:23

Я нашел что-то вроде этого, и это действительно удовлетворило меня, как я хочу :) Но я хочу узнать, что это эффективный способ извлечения данных из XML? Вот код tho:

XmlDocument doc = new XmlDocument();

            doc.Load(HttpContext.Current.Server.MapPath("config.xml"));

            logEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["logEnable"].InnerText);
            warningEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["warningEnable"].InnerText);
            errorEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["errorEnable"].InnerText);
            generalEnable = Convert.ToBoolean(doc["Configurations"]["LogConfiguration"]["generalEnable"].InnerText);
0
11.12.2008 20:18:17