2

いくつかの構成設定を読み込むための最良の方法を決定しようとしています。基本的に、複数の人がログインするアプリケーションがあり、ログインしたら、すべての設定をロードしたいと考えています (例: 色、フォント サイズ、個人記録など)。

.NET で解析するのはかなり簡単だと思ったので、XML ファイルを使用してこれを行うことを考えていましたが、予想よりも難しいようです。

<ProgramSettings>   
  <database file="C:\database.mdb" />    
</ProgramSettings>

<UserSettings>
  <user key="user1">
    <layout color="red" fontsize="5" />
    <data file="C:\test1.txt" />
  </user>

  <user key="user2">
    <layout color="blue" fontsize="2" />
    <data file="C:\test2.txt" />
  </user>

</UserSettings>

注: 何らかの理由で一部のコードが表示されていませんが、基本的に「ProgramSettings」および「UserSettings」というラベルの付いた主要なセクションがあります。編集:私のためにそれを修正してくれた人に感謝します。

とにかく、私がやりたいのは、ユーザーのログイン名か何かになる「ユーザーキー」を取得することです。次に、次のようなことができるとよいでしょう。

String userLogin = "user1";

// returns red
String color = myXMLFile["UserSettings"][userLogin]["layout"]["color"];         

// returns 5
String fontSize = myXMLFile["UserSettings"][userLogin]["layout"]["fontsize"];   

このようなことは可能ですか?私が行ったすべての調査は、各値をループする必要があることを示しているようです。ファイル全体をロードし、任意の要素に直接アクセスしたいと思います。

次のように値を編集できれば素晴らしいでしょう。

myXMLFile["UserSettings"][userLogin]["layout"]["fontsize"] = "green";
4

5 に答える 5

5

統合構成モデルを使用することをお勧めします。これにより、すべての作業が不要になります。設定の下のプロジェクト設定で見つけることができます。

必要に応じて、ユーザー レベル (変更可能) とアプリケーション レベル (コードで変更不可) の両方があり、 経由でアクセスしてデータを使用できますprojectnamespace.Properties.Settings

msdn (リンクは Visual Studio 2005 用ですが、それ以降のバージョンにも適用されます)。

于 2010-12-01T16:22:13.507 に答える
2

.NET3.5XDocument以降を使用しているかどうかを確認してください。

MSDN XDocument

あなたはこれとしてあなたがしようとしていることをすることができます:

XDocument Settings = new XDocument;
Settings = XDocument.Load("XmlFilePath");

//This Section Gets the Program Settings

XElement ProgramSettings = Settings.Element("ProgramSettings");
string DatabaseFile = ProgramSettings.Element("database").Attribute("file").Value.ToString();


//This section gets the logged in users Settings

XElement UserSettings = Settings.Element("UserSettings");

//Get Node For current USer

XElement CurrentUserSettings = UserSettings.Element(loggedInUserName);
string UserColor = CurrentUserSettings.Element("Layout").Attribute("color").Value.ToString();
string USerFontSize = CurrentUserSettings.Element("Layout").Attribute("font").Value.ToString();
string dataFile = CurrentUserSettings.Element("data").Attribute("file").Value.ToString();

それはあなたのために働くはずです。

于 2010-12-01T16:27:45.157 に答える
1

理想的なアプローチとは言えません。頭の中で正確な構文を思い出せませんが、.net3.5の一部であるSystem.Linq.Xmlライブラリを使用できます。

まず最初に、次のようなxmlファイルをロードします。

var xDoc = XDocument.Load("MyFile.xml");
var myElementValue = xDoc.Element("UserSettings")
                         .Element("userLogin")
                         .Element("layout")
                         .Element("fontsize")
                         .Value;

私の構文は100%正しくない可能性があり、実際には、すべてを読み取る前に、ノードがすべてそこにあることを確認するためにいくつかの検証を行う必要がありますが、それで必要なことができると思います。XPathを実行して、ノードに直接移動することもできます...次のようになります。

var xmlResult = xDoc.XPathSelectElement("UserSettings/UserLogin/Layout/Fontsize").Value;

.net 3.5以降のXMLを操作する新しい方法を知っている限り、詳細についてはその名前空間を探してください。

于 2010-12-01T16:26:03.620 に答える
1

C# で XML ファイルを処理するかなり快適な方法は、Linq to XML を使用することだと思います。

using (FileStream lStream = new FileStream("ConfigurationSettings.xml", FileMode.Open, FileAccess.Read))
{
     XElement lRoot = XElement.Load(lReader)
     string userLogin = "user1";
     XElement user = lRoot.Element("UserSettings").Elements("user").Where(x => x.Attribute("Key").Value == userLogin).FirstOrDefault();
      if (user != null)
      {
          // returns red
          string color = user.Element("layout").Attribute("color").Value;

          // returns 5
          string fontSize = user.Element("layout").Attribute("fontsize").Value;
      }

}
于 2010-12-01T16:34:07.450 に答える
0

System.Xml.XmlDocumentクラスを見てください。具体的には、SelectSingleNodeメソッドを使用します。これにより、書き込み可能なValueプロパティを持つXmlNodeが提供されます。

于 2010-12-01T16:25:32.907 に答える