2010-04-09 57 views
2

我如何使用恶性更改连接字符串从nhibernate.config文件变化NHibernate的配置与恶性xmlpoke

的问题是,所有的例子都是有关更改属性值,但NHibernate的具有内部文本

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

我需要改变物业connection.connection_string

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

这在这种情况下不起作用。

感谢

回答

7

您正在使用的示例XPath指向名为add一个名为key属性的元素。在你的情况下,你正在寻找具有name属性的property元素。

接下来,由于您要更改内部文本而不是property元素上的@value属性,因此应删除尾部属性引用。

最后,由于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中的所有各个部分。

祝你好运!

+0

感谢彼得, 这帮助我理解了这个概念。只有我改变的是“@nhc:name =”而不是“@ name =” – isuruceanu 2010-04-09 11:02:58

+0

啊,这很有道理。该属性已经在其元素的上下文中。现在修好了! – 2010-04-09 12:06:10