Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XElement.CreateNavigator与XDocument.CreateNavigator_C#_Xml - Fatal编程技术网

C# XElement.CreateNavigator与XDocument.CreateNavigator

C# XElement.CreateNavigator与XDocument.CreateNavigator,c#,xml,C#,Xml,给定此XML文件: <?xml version="1.0" encoding="utf-8"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <mySection> <NetworkShare folder="

给定此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>
但此代码有效(正确打印出文件夹):


这是.net中的错误吗?

问题在于
XDocument
上的查询与
XElement
上的查询处于不同的上下文中。对于
XDocument
,它表示整个文档。它的子元素是根元素(
configuration
)。对于
XElement
,它表示元素本身

因此,当您通过
XElement.Load()
加载文件时,查询将与该元素相关。通过
XDocument.Load()
加载文件时,查询将与文档相关


因此,当您查询
/configuration/…
时,由于对于
XElement
您当前位于
配置
元素,它显然没有
配置
子元素,因此查询不会产生任何结果。另一方面,对于
XDocument
,它可以正常工作。

谢谢。使用XElement,正确的解析方法是使用var q=navigator.Select(“/mySection/NetworkShare”);
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));
            }