Alterar o Nibernate Config com Nant Xmlpoke
-
25-09-2019 - |
Pergunta
Como posso alterar a string de conexão do arquivo Nibernate.config usando o NANT
O problema é que todos os exemplos são sobre mudança de valor de atributo, mas Nhibernate tem texto interno
Eq:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.connection_string">Data Source.\server;Database=UnitTestDb;UID=user;pwd=pass;</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="show_sql">true</property>
<property name="connection.release_mode">auto</property>
<property name="adonet.batch_size">500</property>
....
Preciso alterar a Property Connection.Connection_String
<xmlpoke file="${nhibernate.file}"
xpath="/hibernate-configuration/session-factory/add[@key='connection.connection_string']/@value"
value="${connection.string}">
</xmlpoke>
Isso não funciona neste caso.
Obrigado
Solução
A amostra XPath que você está usando se refere a elementos nomeados add
com atributos chamados key
. No seu caso, você está procurando property
elementos com atributos chamados name
.
Em seguida, já que você deseja mudar o texto interno e não o @value
atributo no property
Elemento Você deve remover a referência de atributo à direita.
E, finalmente, como o Nibernate XML tem um espaço para nome específico, você terá que informar xmlpoke Para usar o espaço para nome correto.
Portanto, a tarefa deve ficar assim:
<xmlpoke file="${nhibernate.file}"
xpath="/nhc:hibernate-configuration/nhc:session-factory/nhc:property[@name='connection.connection_string']"
value="${connection.string}">
<namespaces>
<namespace prefix="nhc" uri="urn:nhibernate-configuration-2.2" />
</namespaces>
</xmlpoke>
Nota: Eu não testei isso, mas as regras gerais de XML/XPath estão trabalhando aqui, então espero que funcione. Além disso, pode ser que exista uma maneira de indicar ao XMLPOKE que o espaço para nome especificado deve ser o padrão e, assim, eliminar a necessidade de namespace prefixar todas as várias partes do XPath.
Boa sorte!