XmlPoke和唯一节点

时间:2010-04-06 12:30:23

标签: xpath nant xmlpoke

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

 <Project>
    <PropertyGroup>
    </PropertyGroup>
    <PropertyGroup>
    </PropertyGroup>
    <PropertyGroup>
    </PropertyGroup>
 </Project>

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

编辑:抱歉,我认为这不重要(但确实如此),Project有一个名称空间。我把正确的XML和正确的xmlpoke作为未来搜索者的答案。

1 个答案:

答案 0 :(得分: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>

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

  <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">