如何使用xmltextreader读取此xml属性

时间:2013-03-17 12:24:49

标签: .net xml

我有以下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();

1 个答案:

答案 0 :(得分: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。如果有多个条目具有相同的密钥,它仍然会抛出异常 - 这表示配置文件已损坏。