【问题标题】:XmlPoke and unique nodesXmlPoke 和唯一节点
【发布时间】:2010-04-06 12:30:23
【问题描述】:

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

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

我使用//Project/PropertyGroup[1] 的xpath 来获取第一个PropertyGroup,但我收到错误:“Non-unique xpath given //Project/PropertyGroup[1]”。

编辑:抱歉,我认为这无关紧要(但确实如此),Project 有一个命名空间。我将正确的 XML 与正确的 xmlpoke 作为任何未来搜索者的答案。

【问题讨论】:

    标签: xpath nant xmlpoke


    【解决方案1】:

    好的,我对上面的 XML sn-p 进行了过多的简化——我想如果我没有的话,有人会想出来的。答案是,既然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">
    

    【讨论】:

    • 1+ 用于发现自己。顺便说一句:除非必须,否则不要使用//。如果x:Project 是文档元素,请使用/x:Project/...
    • 谢谢@Tomalak。只是向您表明您不应该在问题中过多地简化代码。您可能对什么是重要的有误,这就是为什么您一开始就无法弄清楚的原因。
    • 当然。我见过很多人编写的代码示例非常简化,以至于他们实际上将问题抽象出来。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2023-03-22
    • 1970-01-01
    • 2012-01-31
    • 2017-05-04
    相关资源
    最近更新 更多