C# XmlDocument.SelectSingleNode通过有效xpath返回Null(是否尝试了旧答案)

C# XmlDocument.SelectSingleNode通过有效xpath返回Null(是否尝试了旧答案),c#,xml,xpath,null,C#,Xml,Xpath,Null,我已阅读并将答案应用于我的代码,但它仍然不起作用。 我使用xml来读取csproj文件,以便在它的主体中读/写一些东西。 这是我的csproject文件,如果有人关心的话 我的代码: static void Main(string[] args) { string file = @"D:\Project\svn_longnx\LearnSvnRevision\ConsoleApp1\WindowsFormsApp1\WindowsFormsApp1.csproj"; XmlDoc

我已阅读并将答案应用于我的代码,但它仍然不起作用。
我使用xml来读取csproj文件,以便在它的主体中读/写一些东西。 这是我的csproject文件,如果有人关心的话
我的代码:

static void Main(string[] args)
{
    string file = @"D:\Project\svn_longnx\LearnSvnRevision\ConsoleApp1\WindowsFormsApp1\WindowsFormsApp1.csproj";
    XmlDocument xdoc = new XmlDocument();
    xdoc.Load(file);
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
    nsmgr.AddNamespace("default", "http://schemas.microsoft.com/developer/msbuild/2003");

    XmlElement root = xdoc.DocumentElement;

    XmlNode node = root.SelectSingleNode("Project/PropertyGroup/ApplicationVersion",nsmgr);

    Console.WriteLine(node.Value);
}
此伪代码失败:

    static void Main(string[] args)
    {
        string file = @"D:\Project\svn_longnx\LearnSvnRevision\ConsoleApp1\WindowsFormsApp1\WindowsFormsApp1.csproj";
        XmlDocument xdoc = new XmlDocument();
        xdoc.Load(file);
        XmlElement root = xdoc.DocumentElement;
        XmlNode node = root.SelectSingleNode("Project/PropertyGroup/ApplicationVersion");
        Console.WriteLine(node.Value);
    }

使用
XDocument
和关联对象比使用较旧的
XmlDocument
位容易得多。此外,您可能会因为名称空间而失败。相反,请尝试以下代码:

var doc = XDocument.Load(@"D:\Project\svn_longnx\Lear...\WindowsFormsApp1.csproj");
var ns = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003");

var applicationVersionElements = doc.Element(ns + "Project")
    .Descendants(ns + "PropertyGroup")
    .Descendants(ns + "ApplicationVersion");

foreach (var element in applicationVersionElements)
{
    Console.WriteLine(element.Name);
}
这只是一个示例,说明如何获取特定元素来演示它的易用性


注意,您可能需要使用System.Xml.Linq添加

提示:使用
XDocument
和关联对象,而不是旧的
XmlDocument
您向管理器添加了名称空间,但在xpath中不使用它。使用
“default:Project/default:PropertyGroup/default:ApplicationVersion”
@AlexanderPetrov:它仍然为空。