2010-04-06 11 views
5

Estoy tratando de usar una tarea xmlpoke para actualizar un archivo de proyecto VS (que es XML). En la raíz del proyecto, hay varios nodos PropertyGroup, estoy tratando de seleccionar el primero. El XML es el siguienteNodos XmlPoke y únicos

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

estoy usando un XPath de //Project/PropertyGroup[1] para conseguir el primer PropertyGroup, pero me sale el error: “No única XPath dada // Proyecto/PropertyGroup [1]”.

corregir: lo siento, no pensé que importara (pero lo hace), Project tiene un espacio de nombres. Puse el XML correcto con el xmlpoke correcto como respuesta para futuros buscadores.

Respuesta

9

Ok, simplifiqué demasiado el fragmento de XML, creo que alguien lo hubiera averiguado si no lo hubiera hecho. La respuesta es que, dado que tiene un espacio de nombres del proyecto, tiene que ser así

<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> 

Como referencia, la etiqueta del Proyecto es el siguiente:

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

1+ para encontrar usted mismo. Por cierto: no use '//' a menos que sea necesario. Si 'x: Project' es el elemento del documento, use'/x: Project/... '. – Tomalak

+1

Gracias @Tomalak. Solo sirve para mostrarle que no debe simplificar demasiado el código en una pregunta. Es posible que se equivoque sobre lo que es importante, y por eso no puede resolverlo en primer lugar. –

+0

Absolutamente. He visto a muchas personas inventando muestras de código que están tan simplificadas que realmente logran abstraer su problema. :-) – Tomalak

Cuestiones relacionadas