2010-04-06 58 views
5

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

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

我使用的//Project/PropertyGroup[1]的XPath拿到第一的PropertyGroup,但我得到的错误:“鉴于非唯一的XPath //项目/的PropertyGroup [1]”。

编辑:对不起,我不认为它重要(但它),项目有一个命名空间。我将正确的XML与正确的xmlpoke作为任何未来搜索者的答案。

回答

9

好的,我简化了上面的XML片段太多 - 我认为有人会想出来,如果我没有。答案是,因为项目有一个命名空间,它需要这样

<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 ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> 
+4

1+找出自己。顺便说一句:除非必须,否则不要使用'//'。如果'x:Project'是文档元素,则使用'/ x:Project/...'。 – Tomalak 2010-04-06 14:01:23

+1

谢谢@Tomalak。只是要告诉你,你不应该在一个问题中过多地简化代码。你可能错在重要的事情上,这就是为什么你无法摆脱首位。 – 2010-04-06 15:46:34

+0

当然。我看到很多人编写的代码示例非常简单,以至于他们可以将问题抽象出来。 :-) – Tomalak 2010-04-06 16:12:45