Чтение / запись / изменение XML - PullRequest
4 голосов
/ 11 декабря 2008

У меня есть такой 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, как бы я мог это сделать?

Спасибо ...

Привет ...

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

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

Ответы [ 3 ]

5 голосов
/ 11 декабря 2008
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, что даст вам уличную репутацию среди крутых ребят. Но приведенный выше пример должен помочь вам быстро приступить к работе, просто пообещайте, что вы тоже поработаете над этими другими вещами, и вам это будет лучше.

1 голос
/ 11 декабря 2008

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

0 голосов
/ 11 декабря 2008

Я нашел что-то вроде этого, и это фактически удовлетворило меня, как я хочу :) Но я хочу узнать, что это эффективный способ извлечения данных из 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...