2010-04-09 17 views
2

Comment puis-je changer la chaîne de connexion à partir du fichier nhibernate.config en utilisant NantModifier config NHibernate avec Nant xmlpoke

le problème est que tous les exemples sont sur le point de changer la valeur d'attribut, mais a NHibernate le texte intérieur

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

Je dois changer la propriété connection.connection_string

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

cela ne fonctionne pas dans ce cas.

Merci

Répondre

7

L'échantillon XPath vous utilisez fait référence à des éléments nommés add avec des attributs appelés key. Dans votre cas, vous recherchez property éléments avec des attributs appelés name.

Ensuite, étant donné que vous souhaitez modifier le texte interne et non l'attribut @value sur l'élément property, vous devez supprimer la référence d'attribut de fin. Et enfin, comme le fichier XML de NHibernate a un espace de nommage spécifique, vous devrez indiquer xmlpoke pour utiliser l'espace de noms correct.

La tâche devrait ressembler à ceci:

<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: Je ne l'ai pas testé ceci, mais les règles xml général/XPath sont dans le travail ici, donc j'espère que ça marchera. En outre, il pourrait y avoir un moyen d'indiquer à xmlpoke que l'espace de nommage spécifié devrait être la valeur par défaut et ainsi éliminer le besoin de préfixer l'espace de noms toutes les différentes parties dans le xpath.

Bonne chance!

+0

Merci Peter, cela m'a aidé à comprendre le concept. La seule chose que j'ai changé est au lieu de "@nhc: name =" cela devrait être "@ name =" – isuruceanu

+0

Ah, c'est logique. L'attribut est déjà dans le contexte de son élément. Maintenant corrigé! –