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>

3つのキー値すべてを読み取り、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;
                }
             }
          }

実際には、web.configで行ったxmlを使用して次のようなものが必要です

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

1 に答える 1

0

これには間違いなくLINQtoXMLを使用します。

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て戻り値をキャストすることです。stringValue

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 に答える