读/写/修改XML

时间:2008-12-11 18:40:26

标签: .net asp.net 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改变它们的一个值,我怎么能这样做呢?

...谢谢

...问候

P.s:如果你写了更多的解释性代码,我们将非常感激。

再次感谢...

3 个答案:

答案 0 :(得分:5)

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,我没有事先编译它。此代码按原样提供,不作任何担保或保证。 ;)

这是.NET中的基本XML读/写过程,但有很多选项。您可以使用XPath查询,或者如果您使用的是.NET 3.5,则可以使用Linq to Sql,这将为您提供酷炫的孩子。但是上面的示例应该可以帮助您快速启动并运行,只是承诺您将对这些其他事情进行一些研究,您将会更好。

答案 1 :(得分:1)

最佳做法是实际使用web.config或app.config文件。它还使这个过程变得更加容易。

答案 2 :(得分:0)

我发现了这样的事情,这实际上让我满意,我想要:)  但我想知道这是从XML检索数据的有效方法吗? 这是代码:

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);