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

问题是对 an 的查询与对 anXDocument的查询处于不同的上下文中XElement。对于 a XDocument,它代表整个文档。它的子元素是根元素(configuration在这种情况下)。对于 a XElement,它代表元素本身。

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

因此,当您查询 时/configuration/...,由于XElement您当前位于configuration元素中,因此它显然没有configuration子元素,因此查询不会产生任何结果。XDocument另一方面,它按预期工作。

于 2013-03-27T00:31:35.070 回答