NSIS XML更新(Wizou的插件)查询

NSIS XML更新(Wizou的插件)查询,nsis,Nsis,我试图从一个xml文件中读取一个节点值,并将其存储在一个变量中,以将其放回另一个xml文件中。我使用Wizou的NSIS XML插件在NSIS安装程序中执行此操作,我面临的问题是无法读取节点值,我使用的代码如下所示 nsisXML::create nsisXML::load '${CONFIG}' /* This is the XML file for reading the value*/ messagebox MB_OK "Value in var0 is $0" nsisXML::sele

我试图从一个xml文件中读取一个节点值,并将其存储在一个变量中,以将其放回另一个xml文件中。我使用Wizou的NSIS XML插件在NSIS安装程序中执行此操作,我面临的问题是无法读取节点值,我使用的代码如下所示

nsisXML::create
nsisXML::load '${CONFIG}' /* This is the XML file for reading the value*/
messagebox MB_OK "Value in var0 is $0"
nsisXML::select '/hibernate-configuration/session-factory/property[@name="connection.connection_string"]'
messagebox MB_OK "Value in var1 is $1"
messagebox MB_OK "Value in var2 is $2"
在引用的路径中存在文件文件的初始加载之后,我将在$0中获得一些值,这意味着xml文件将被加载,之后我将尝试选择从中读取值的节点。但是在nsisxml::select语句之后,var的$1和$2的值为0,这表明它找不到节点,但是当您查看它时,它在xml中,xml文件内容如下所示

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">
NHibernate.Connection.DriverConnectionProvider
</property>
<property name="dialect">
NHibernate.Dialect.MsSql2005Dialect
</property>
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="connection.connection_string">
DB String 
</property>
<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
</session-factory>
</hibernate-configuration>

你知道我在这件事上哪里会出错吗?提前感谢

问题在于XPath搜索字符串不处理xmlns

您可以像这样忽略XMLN:

InitPluginsDir
FileOpen $0 "$pluginsdir\Test.xml" w
FileWrite $0 '<?xml version="1.0" encoding="utf-8" ?>$\r$\n'
FileWrite $0 '<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">$\r$\n'
FileWrite $0 '<session-factory>$\r$\n'
FileWrite $0 '<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>$\r$\n'
FileWrite $0 '<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>$\r$\n'
FileWrite $0 '<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>$\r$\n'
FileWrite $0 '<property name="connection.connection_string">DB String</property>$\r$\n'
FileWrite $0 `<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>$\r$\n`
FileWrite $0 '<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>$\r$\n'
FileWrite $0 '</session-factory>$\r$\n'
FileWrite $0 '</hibernate-configuration>$\r$\n'
FileClose $0

nsisXML::create
nsisXML::load "$pluginsdir\Test.xml"
DetailPrint doc=$0
nsisXML::select `/*[name()='hibernate-configuration']/*[name()='session-factory']/*[name()='property'][@name="connection.connection_string"]`
DetailPrint 1=$1,2=$2,3=$3

嘿,谢谢你澄清这一点…实际上,我使用了下一个可用于NSIS的XML插件,现在有点受不了了…即将为此打开另一篇文章。。