2010-04-06 13 views
5

Sto tentando di utilizzare un'attività xmlpoke per aggiornare un file di progetto VS (che è XML). Nella root del progetto ci sono più nodi PropertyGroup, sto provando a selezionare il primo. L'XML è simile al seguenteXmlPoke e nodi univoci

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

Sto usando un XPath di //Project/PropertyGroup[1] per ottenere il primo PropertyGroup, ma ottengo l'errore: “xpath non unico dato // Progetto/PropertyGroup [1]”.

modifica: scusa, non pensavo che fosse importante (ma lo è), Project ha uno spazio dei nomi. Ho messo l'XML corretto con il xmlpoke corretto come risposta per ogni futuro utente.

risposta

9

Ok, ho semplificato lo snippet XML sopra troppo - penso che qualcuno lo avrebbe capito se non l'avessi fatto. La risposta è che, poiché Progetto ha uno spazio dei nomi, ha bisogno di essere così

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

Per riferimento, il tag del progetto è simile al seguente:

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

1+ per scoprire se stessi. BTW: non usare '//' a meno che non sia necessario. Se 'x: Project' è l'elemento del documento, usa'/x: Project/... '. – Tomalak

+1

Grazie a @Tomalak. Basta mostrarti che non dovresti semplificare troppo il codice in una domanda. Potresti sbagliarti su ciò che è importante, e questo è il motivo per cui non riesci a capirlo in primo luogo. –

+0

Assolutamente. Ho visto molte persone creare campioni di codice che sono così semplificati da riuscire a gestire in modo astratto il problema. :-) – Tomalak