3

接続文字列を格納するために、いくつかのアプリケーション用の外部 XML 構成ファイルを作成しようとしています。ファイルは次のようになります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
  <Connection Name = "Primary">
    <Server Name = "DisneyWorld">
      <Database Name ="MagicKingdom">
        <Project Name ="Rides">
          <Login Username="Mickey" Password="Mouse" Encrypted="False"/>
        </Project>
        <Project Name = "Food">
          <Login Username="Goofy" Password="123456" Encrypted="True"/>
        </Project>
        <Project Name ="Shows">
          <Login Username ="Minnie" Password="Mouse" Encrypted="False"/>
        </Project>
      </Database>
    </Server>
    <Server Name = "Epcot">
      <Database Name ="LandOfTomorrow">
        <Project Name = "Innovation">
          <Login Username="Daffy" Password="Duck" Encrypted="False"/>
        </Project>
      </Database>
    </Server>
  </Connection>
</configuration>

プライマリ接続がダウンした場合に備えて、セカンダリ接続があります。私がやりたいのは、プロジェクトを検索することです: Food は、そのログ情報、データベース、およびサーバーを取得します。このコードでできること:

XDocument doc = XDocument.Load(path);
var query = from connection in doc.Descendants("Connection")
            where connection.Attribute("Name").Value == "Primary"
            from project in connection.Descendants("Project")
            where project.Attribute("Name").Value == targetProject
            select new
            {
                Server = connection.Element("Server").Attribute("Name").Value,
                Database = project.Parent.Attribute("Name").Value,
                UserName = project.Element("Login").Attribute("Username").Value,
                Password = project.Element("Login").Attribute("Password").Value,
                Encrypted = project.Element("Login").Attribute("Password").Value
            };

コードは、現在の構造にハードコードされていることを除いて、うまく機能します。ライン上

Server = connection.Element("Server").Attribute("Name").Value,

Database = project.Parent.Attribute("Name").Value,

project.Ancestors("Server") から値を取得できるようにしたいのですが、これを達成する方法は理解しています。

4

1 に答える 1

3

次のような意味ですか。

Server = project.Ancestors("Server").Single().Attribute("Name").Value;
Database = project.Ancestors("Database").Single().Attribute("Name").Value;

もちろん、これは、特定の要素の祖先が 1 つしか存在しないことを前提としています。

于 2013-02-28T19:32:02.597 に答える