2012-03-20 7 views
6

Como parte de un proceso de CI, intento crear una etiqueta de construcción que consta del contenido de un elemento xml dentro de una estructura xml. Para este propósito estoy usando nant y xmlpeek. Mi problema es que me da un error extraño que indica:El uso de xmlpeek en la secuencia de comandos de Nant da un error impar

"Nodeindex '0' está fuera de rango"

Este es sólo el caso si el archivo XML Soy xmlpeeking contiene una definición de espacio de nombres el nodo raíz.

Eliminar el espacio de nombres del archivo xml me da la salida que espero.

El objetivo Nant que genera el error puede ser boild a:

<target name="TDSLabel"> 
      <property name="element" value=""/> 
      <echo message="Getting element" /> 
      <xmlpeek file="C:\xxx\test1.xml" xpath="//Project/PropertyGroup/ProductVersion" property="element"/> 
      <echo message="The found element value was: ${element}" /> 
    </target> 

y el archivo test1.xml se ve así:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <ProductVersion>9.0.21022</ProductVersion> 
    </PropertyGroup> 
</Project> 

Respuesta

5

Ya dio el derecho de hacer alusión a sí mismo. Se trata del espacio de nombres. Esto debería solucionarlo:

<target name="TDSLabel"> 
    <property name="element" value=""/> 
    <echo message="Getting element" /> 
    <xmlpeek 
    file="C:\xxx\test1.xml" 
    xpath="//x:Project/x:PropertyGroup/x:ProductVersion" 
    property="element" 
    verbose="true"> 
    <namespaces> 
     <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> 
    </namespaces> 
    </xmlpeek> 
    <echo message="The found element value was: ${element}" /> 
</target> 
+0

Como se indica más adelante el mismo problema puede ocurrir cuando se utiliza xmlpoke (http://stackoverflow.com/questions/2584766/nant-xmlpoke-and-unique-nodes). Extrañamente, no recibí ninguna visita de Google directamente en el mensaje de error combinado con xmlpeek o nant. Gracias por su respuesta, ahora otras personas podrían no quedar atrapadas con ese extraño mensaje de error – VilladsR

0

encuentra un problema similar y el anwser a mi problema aquí: XmlPoke and unique nodes. El problema era que no he incluido la definición de espacio de nombres dentro del elemento xmlpeek y después omite la referencia necesaria para el espacio de nombres en mi declaración XPath:

<xmlpeek file="C:\xxx\test1.xml" xpath="//x:Project/x:PropertyGroup/x:ProductVersion" property="element"> 
    <namespaces> 
     <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> 
    </namespaces> 
</xmlpeek> 
Cuestiones relacionadas