【问题标题】:Null return on XmlDocument.SelectSingleNode through valid xpath (did try the old answer)通过有效的 xpath 在 XmlDocument.SelectSingleNode 上返回 Null(尝试了旧答案)
【发布时间】:2018-06-28 10:23:29
【问题描述】:

我已阅读 other question 并将答案应用于我的代码,但它仍然无法正常工作。
我使用 xml 来读取 csproj 文件以将某些内容读/写到它的主体中。 This 是我的 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
  • 您向管理器添加了一个命名空间,但不要在 xpath 中使用它。使用"default:Project/default:PropertyGroup/default:ApplicationVersion"
  • @AlexanderPetrov :它仍然为空。 imgur.com/p90RofB

标签: c# xml xpath null


【解决方案1】:

使用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);
}

这只是作为如何获取特定元素以展示其易用性的示例的一种方式。

注意,您可能需要添加using System.Xml.Linq;

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2016-03-12
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多