Pregunta

Hola estoy usando Xpath en mi escritura de la estructura Nant cambiar algunas variables de configuración entre el desarrollo y mis otros entornos.

he tomado la sintaxis de este ejemplo:

El ejemplo es similar al siguiente:

<xmlpoke
    file="config01/app.config"
    xpath="/configuration/appSettings/add[@key='AppName']/@value"
    value="TradeMonster">
</xmlpoke>

Lo que me gustaría es algo similar a esto para buscar mis cadenas de conexión y encontrar todas las instancias de "localhost \ SqlExpress" y sólo cambiar a simplemente "localhost"

¿Es esto posible?

¿Fue útil?

Solución

Jugando con un guión sucia Quick'n aquí ....

Si está seguro de que sólo hay un elemento de connectionstring en cada archivo se puede lograr esto con una combinación de xmlpeek y xmlpoke. La modificación de la cadena es más fácil hacerse con un poco de C #, por lo tanto, utilizando una tarea de secuencia de comandos para hacer una búsqueda de expresiones regulares y reemplazar:

 <script language="C#" prefix="custom" >
      <code>
        <![CDATA[
          [Function("fix")]
          public static string Fix(string input) {
              return Regex.Replace(input, @"localhost\\\w+", "localhost");
          }
        ]]>
      </code>
  </script>

<!-- Get the existing connection string -->
<xmlpeek
    file="config01/app.config"
    xpath="/configuration/connectionStrings/add[@contains(@connectionString,'localhost\')]/@connectionString"
    property="connectionstring">
</xmlpeek>

<!-- Write back the modified connection string -->
<xmlpoke
    file="config01/app.config"
    xpath="/configuration/connectionStrings/add[@contains(@connectionString,'localhost\')]/@connectionString"
    value="${custom::fix(connectionstring)}">
</xmlpoke>

Otros consejos

XPath sólo selecciona los nodos, no se puede cambiar nodos .

Una forma de lograr los cambios necesarios es llevar a cabo una transformación XSLT en el documento XML.

Con el fin de hacer que esto suceda, usted tiene que proporcionar el documento XML y especificar exactamente cuáles de sus nodos de texto deben ser cambiadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top