1

machine.configファイルには、サードパーティのソフトウェアによって書き込まれた要素があるため、次のようになります。

<configuration>
    <configSections>
    ...
    </configSections>

    ...

    <Custom>
        <Level1> ... 
        </Level1>

        <Level2> ... 
        </Level2>

        <Level3>
            <add key="key_text1" value="s1" />
            <add key="key_text2" value="s2" />
            <add key="key_text3" value="s3" />
        </Level3>
    </Custom>
</configuration>

たとえば、configuration / Custom/Level3ノードからkey="key_text2"である"value"属性の値( "s2")を取得したいと思います。これまで、machine.configをXMLとして開き、そこから作業しようとしました。

Configuration config = ConfigurationManager.OpenMachineConfiguration();
XmlDocument doc = new XmlDocument();
doc.LoadXml(config.FilePath);

ただし、XmlException「ルートレベルのデータが無効です。」が表示されます。また、これを行うためにConfigurationクラスメソッドを直接使用する方法もわかりません。任意のアイデアをいただければ幸いです。

4

2 に答える 2

2

Load()代わりにメソッドを使用してみてくださいLoadXml()

doc.Load(config.FilePath);

また、XmlDocumentの代わりにXDocumentを参照することをお勧めします。LINQは、構成ファイルからその値を取得するときに実際に役立ちます。

于 2013-01-24T09:44:11.377 に答える
2

Machine.configの場所を取得するには、 RuntimeEnvironment.SystemConfigurationFileを使用します。

XmlDocument doc = new XmlDocument();
doc.Load(RuntimeEnvironment.SystemConfigurationFile);

また、Linq to Xml を使用しないのはなぜですか?

XDocument xdoc = XDocument.Load(RuntimeEnvironment.SystemConfigurationFile);
var element = xdoc.XPathSelectElement("//Custom/Level3/add[@value='s2']");
if (element != null)
    key = (string)element.Attribute("key");
于 2013-01-24T09:45:38.100 に答える