我有一个像这样的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:如果你写了更多的解释性代码,我们将非常感激。
再次感谢...
答案 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);