XmlPoke和唯一节点

Lou*_*nco 5 nant xpath xmlpoke

我正在尝试使用xmlpoke任务来更新VS项目文件(这是XML).在Project根目录中,有多个PropertyGroup节点,我试图选择第一个节点.XML看起来像这样

 <Project>
    <PropertyGroup>
    </PropertyGroup>
    <PropertyGroup>
    </PropertyGroup>
    <PropertyGroup>
    </PropertyGroup>
 </Project>
Run Code Online (Sandbox Code Playgroud)

我使用xpath //Project/PropertyGroup[1]来获取第一个PropertyGroup,但是我收到错误:"给定的非唯一xpath // Project/PropertyGroup [1]".

编辑:对不起,我认为它不重要(但确实如此),Project有一个命名空间.我把正确的XML和正确的xmlpoke作为未来搜索者的答案.

Lou*_*nco 9

好吧,我上面简化了上面的XML片段 - 我想如果我没有,我会想出来的.答案是,由于Project有一个命名空间,它需要是这样的

   <xmlpoke file="project_file.csproj" value="v4.0" xpath="//x:Project/x:PropertyGroup[1]/x:TargetFrameworkVersion">
    <namespaces>
      <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
    </namespaces>
   </xmlpoke>
Run Code Online (Sandbox Code Playgroud)

作为参考,Project标签如下所示:

  <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
Run Code Online (Sandbox Code Playgroud)

  • 1+用于发现自己.BTW:除非必须,否则不要使用`//`.如果`x:Project`是文档元素,请使用`/ x:Project/...`. (4认同)