views:

183

answers:

1

Hi All

How can I change the connection string from nhibernate.config file using nant

the problem is that all examples are about changing attribute value, but nhibernate has inner text

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

I need to change property connection.connection_string

<xmlpoke        file="${nhibernate.file}"
        xpath="/hibernate-configuration/session-factory/add[@key='connection.connection_string']/@value"
        value="${connection.string}">
</xmlpoke>

this does not work in this case.

Thanks

+2  A: 

The sample xpath you're using refers to elements named add with attributes called key. In your case you are looking for property elements with attributes called name.

Next, since you want to change the inner text and not the @value attribute on the property element you should remove the trailing attribute reference.

And finally, since the NHibernate xml has a specific namespace you will have to inform xmlpoke to use the correct namespace.

So the task should look like this:

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

Note: I've not tested this out, but general xml/xpath rules are in work here so I hope it works. Also, it could be that there is a way to indicate to xmlpoke that the specified namespace should be the default and thus eliminate the need to namespace prefix all the various parts in the xpath.

Good luck!

Peter Lillevold
Thanks Peter,this helped me to understand the concept. Only thing I changed is instead of "@nhc:name=" it should be "@name="
isuruceanu
Ah, makes sense. The attribute is already in context of its element. Now fixed!
Peter Lillevold