Нулевой возврат в XmlDocument.SelectSingleNode через действительный xpath (пробовал старый ответ) - PullRequest
0 голосов
/ 28 июня 2018

Я прочитал другой вопрос и применил ответ к своему коду, но он все еще не работает.
Я использую 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);
    }

1 Ответ

0 голосов
/ 28 июня 2018

Гораздо проще использовать 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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...