Измените конфигурацию nhibernate с помощью nant xmlpoke - PullRequest
2 голосов
/ 09 апреля 2010

Как изменить строку подключения из файла nhibernate.config с помощью nant

проблема в том, что все примеры касаются изменения значения атрибута, но nhibernate имеет внутренний текст

экв:

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

Мне нужно изменить свойство connection.connection_string

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

в этом случае это не работает.

Спасибо

1 Ответ

7 голосов
/ 09 апреля 2010

Пример используемого вами xpath относится к элементам с именем add с атрибутами с именем key. В вашем случае вы ищете property элементы с атрибутами с именем name.

Далее, поскольку вы хотите изменить внутренний текст, а не атрибут @value в элементе property, следует удалить ссылку на конечный атрибут.

И, наконец, поскольку NHibernate xml имеет определенное пространство имен, вам придется сообщить xmlpoke , чтобы использовать правильное пространство имен.

Итак, задача должна выглядеть так:

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

Примечание: я не проверял это, но общие правила xml / xpath здесь работают, поэтому я надеюсь, что это работает. Кроме того, возможно, существует способ указать xmlpoke, что заданное пространство имен должно быть значением по умолчанию и, таким образом, устранить необходимость префикса пространства имен для всех различных частей в xpath.

Удачи!

...