nsys XML 更新(vizou 的插件)查询
NSIS XML updation (Wizou's plugin) query
我正在尝试从 xml 文件中读取节点值并将其存储在变量中以将其放回另一个 xml 文件中。我正在使用 NSIS XML 插件(由 Wizou)在 NSIS 安装程序中执行此操作,我面临的问题是它没有读取节点值,我使用的代码如下,
nsisXML::create
nsisXML::load '${CONFIG}' /* This is the XML file for reading the value*/
messagebox MB_OK "Value in var0 is [=11=]"
nsisXML::select '/hibernate-configuration/session-factory/property[@name="connection.connection_string"]'
messagebox MB_OK "Value in var1 is "
messagebox MB_OK "Value in var2 is "
初始加载文件后(文件存在于引用路径中),我在 $0 中得到一些值,这意味着 xml 文件正在加载,之后我试图 select 从中读取值的节点。但是在 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。
你可以像这样忽略 xmlns:
InitPluginsDir
FileOpen [=10=] "$pluginsdir\Test.xml" w
FileWrite [=10=] '<?xml version="1.0" encoding="utf-8" ?>$\r$\n'
FileWrite [=10=] '<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">$\r$\n'
FileWrite [=10=] '<session-factory>$\r$\n'
FileWrite [=10=] '<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>$\r$\n'
FileWrite [=10=] '<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>$\r$\n'
FileWrite [=10=] '<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>$\r$\n'
FileWrite [=10=] '<property name="connection.connection_string">DB String</property>$\r$\n'
FileWrite [=10=] `<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>$\r$\n`
FileWrite [=10=] '<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>$\r$\n'
FileWrite [=10=] '</session-factory>$\r$\n'
FileWrite [=10=] '</hibernate-configuration>$\r$\n'
FileClose [=10=]
nsisXML::create
nsisXML::load "$pluginsdir\Test.xml"
DetailPrint doc=[=10=]
nsisXML::select `/*[name()='hibernate-configuration']/*[name()='session-factory']/*[name()='property'][@name="connection.connection_string"]`
DetailPrint 1=,2=,3=
我正在尝试从 xml 文件中读取节点值并将其存储在变量中以将其放回另一个 xml 文件中。我正在使用 NSIS XML 插件(由 Wizou)在 NSIS 安装程序中执行此操作,我面临的问题是它没有读取节点值,我使用的代码如下,
nsisXML::create
nsisXML::load '${CONFIG}' /* This is the XML file for reading the value*/
messagebox MB_OK "Value in var0 is [=11=]"
nsisXML::select '/hibernate-configuration/session-factory/property[@name="connection.connection_string"]'
messagebox MB_OK "Value in var1 is "
messagebox MB_OK "Value in var2 is "
初始加载文件后(文件存在于引用路径中),我在 $0 中得到一些值,这意味着 xml 文件正在加载,之后我试图 select 从中读取值的节点。但是在 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。
你可以像这样忽略 xmlns:
InitPluginsDir
FileOpen [=10=] "$pluginsdir\Test.xml" w
FileWrite [=10=] '<?xml version="1.0" encoding="utf-8" ?>$\r$\n'
FileWrite [=10=] '<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">$\r$\n'
FileWrite [=10=] '<session-factory>$\r$\n'
FileWrite [=10=] '<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>$\r$\n'
FileWrite [=10=] '<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>$\r$\n'
FileWrite [=10=] '<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>$\r$\n'
FileWrite [=10=] '<property name="connection.connection_string">DB String</property>$\r$\n'
FileWrite [=10=] `<property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>$\r$\n`
FileWrite [=10=] '<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>$\r$\n'
FileWrite [=10=] '</session-factory>$\r$\n'
FileWrite [=10=] '</hibernate-configuration>$\r$\n'
FileClose [=10=]
nsisXML::create
nsisXML::load "$pluginsdir\Test.xml"
DetailPrint doc=[=10=]
nsisXML::select `/*[name()='hibernate-configuration']/*[name()='session-factory']/*[name()='property'][@name="connection.connection_string"]`
DetailPrint 1=,2=,3=