Domanda

Ciao Sto usando Xpath nel mio script di build Nant modificare alcune variabili di configurazione tra sviluppo ed i miei altri ambienti.

ho preso la sintassi da questo esempio:

I esempio si presenta:

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

Quello che vorrei è qualcosa di simile a questo per cercare le mie stringhe di connessione e trovare tutte le istanze di "localhost \ SqlExpress" e semplicemente cambiare a poco "localhost"

È possibile?

È stato utile?

Soluzione

giocare con uno script sporca Quick'n qui ....

Se sei sicuro c'è un solo elemento ConnectionString in ogni file è possibile eseguire questa con una combinazione di xmlpeek e xmlpoke. Modificando la stringa viene più facile fatto con un po 'di C #, quindi, utilizzando un compito script per fare una ricerca regex e sostituzione:

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

Altri suggerimenti

XPath seleziona solo i nodi, non può cambiare i nodi .

Un modo per realizzare i cambiamenti necessari è quello di eseguire una trasformazione XSLT sul documento XML.

Al fine di rendere questo accada, è necessario fornire il documento XML e di specificare esattamente quale dei suoi nodi di testo devono essere cambiate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top