0

我有以下 xml

<?xml version="1.0" encoding="utf-8" ?>
<properties>
  <entry key="dbname">financedb</entry>
  <entry key="username">admin</entry>
  <entry key="password">root</entry>
</properties>

我需要有一个函数,我想读取所有三个键值并使用 XMLTextreader 读入字符串。我试过这个,但我现在不知道该怎么做。

[WebMethod]
       public getConStrings()
        {         
            XmlTextReader reader = new XmlTextReader ("/_layouts/SPCustomWS/zahid.xml");

             XmlNodeType type;
             while (reader.Read())
             {
               type = reader.NodeType;
               if (type == XmlNodeType.Element)
                {
                 if (reader.Name == "dbname")
                      return reader.Value;
                }
             }
          }

实际上我想要像下面这样使用xml的东西,我用web.config做的

string ODataSource = ConfigurationManager.AppSettings["OracleDataSource"].ToString();
string OUserID = ConfigurationManager.AppSettings["OracleUserID"].ToString();
string OPassword = ConfigurationManager.AppSettings["OraclePassword"].ToString();
4

1 回答 1

0

肯定会为此使用 LINQ to XML:

private static string GetSetting(XDocument doc, string key)
{
    return doc.Root
              .Elements("entry")
              .Single(x => (string) x.Attribute("key") == key)
              .Value;
}

...
var document = XDocument.Load("/_layouts/SPCustomWS/zahid.xml");
var dataSource = GetSetting(document, "dbname");
var userName = GetSetting(document, "username");
var password = GetSetting(document, "password");

请注意,Single如果找不到您要的密钥,则会引发异常。通常这是合适的——例如,您不想在没有密码的情况下继续操作。另一种方法是使用SingleOrDefault并将返回值转换为string而不是使用Value属性:

private static string GetSetting(XDocument doc, string key)
{
    return (string) doc.Root
                       .Elements("entry")
                       .SingleOrDefault(x => (string) x.Attribute("key") == key);
}

null如果找不到您要查找的设置,这将返回。如果有多个条目具有相同的键,它仍然会抛出异常——这表明配置文件损坏。

于 2013-03-17T12:39:34.727 回答