2016-10-11 9 views
0

У меня есть следующий простой XML-файл:SelectNodes() вызов на XMLDocument возвращение ничего

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
This file is used by the publish/package process of your Web project. You can customize the behavior of this process 
by editing this MSBuild file. In order to learn more about this please visit http://go.microsoft.com/fwlink/?LinkID=208121. 
--> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>False</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>False</ExcludeApp_Data> 
    <publishUrl>E:\PublishTest</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles> 
    </PropertyGroup> 
</Project> 

И я пытаюсь изменить значение одного из элементов, выполнив следующие действия:

XmlDocument xDoc = new XmlDocument(); 
xDoc.Load(fullPathToPortalPublishSettings); 

// Change the publish url to be the one we want 
var a = xDoc.SelectNodes("/Project/PropertyGroup"); 

Но он всегда взрывается. Я удалил комментарии в верхней части файла XML, я пробовал только /Project, всего Project, и я просто не могу понять, что происходит не так. Я просмотрел другие сообщения, но не понимаю, что с тобой не так. Есть идеи? Благодаря!

+0

потерять конечную косую черту, чтобы сделать ее '/ Project/PropertyGroup' или на самом деле выбрать детей:'/Project/PropertyGroup/* ' – Kris

+0

Извините, я должен был упомянуть, что я попробовал« xDoc.SelectNodes («/ Project») как ну, и даже это ничего не отталкивает. – skaz

+0

вы проверили xDoc в часах? Он содержит то, что вы ожидаете? – Kris

ответ

2

Вы запрашиваете документ, в котором есть пространство имен, поэтому вам необходимо также указать его в коде. поэтому используйте значение nametable, зарегистрируйте пространство имен msbuild в каком-то пространстве имен и используйте это так:

XmlNamespaceManager manager = new XmlNamespaceManager(xDoc.NameTable); 
manager.AddNamespace("msb", "http://schemas.microsoft.com/developer/msbuild/2003"); 
var nodes = xDoc.SelectNodes("//msb:Project/msb:PropertyGroup", manager); 

или аналогичный.

 Смежные вопросы

  • Нет связанных вопросов^_^