1

このXMLファイルを考えると:

<?xml version="1.0" encoding="utf-8"?>
<configuration>  
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>      
  <mySection>
    <NetworkShare folder="\\myFolder\v1" />        
  </mySection>  
</configuration>

次のコードは機能しません(空白の出力を提供します):

var navigator = XElement.Load(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath).CreateNavigator();
            var q = navigator.Select("/configuration/mySection/NetworkShare");
            if (q.Count == 1) // q.Count is 0
            {
                q.MoveNext();
                Console.WriteLine(q.Current.GetAttribute("folder", navigator.Prefix));
            }

しかし、このコードは機能します(フォルダを正しく出力します):

var navigator = XDocument.Load(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath).CreateNavigator();
            var q = navigator.Select("/configuration/mySection/NetworkShare");
            if (q.Count == 1) // q.Count is 1
            {
                q.MoveNext();
                Console.WriteLine(q.Current.GetAttribute("folder", navigator.Prefix));
            }

これは.netのバグですか?

4

1 に答える 1

2

問題は、のクエリがのクエリとXDocumentは異なるコンテキストにあることXElementです。の場合、XDocumentドキュメント全体を表します。その子はルート要素です(configurationこの場合)。の場合XElement、要素自体を表します。

したがって、を介してファイルをロードするXElement.Load()と、クエリはその要素に関連します。を介してファイルをロードするXDocument.Load()と、クエリはドキュメントに関連します。

したがって、クエリを実行する/configuration/...と、XElement現在configuration要素にいるため、明らかにconfiguration子がないため、クエリは何も生成しません。XDocument一方、期待どおりに動作します。

于 2013-03-27T00:31:35.070 に答える