我们正在使用msdeploy(或Web部署,如果您愿意)打包和部署Web应用程序.通过声明参数包时间,我们可以在部署时提供值(以替换连接字符串等).
我们目前面临的问题是替换我们的Web配置中的applicationSettings部分中的值.我们不能让msdeploy替换值,因为我们要替换的内容是xml元素中的文本,而不是属性值(我们得到的警告是:"无法在节点类型'Element'上设置值").
相关配置如下所示:
<applicationSettings>
<Name.Of.Assembly.Properties.Settings>
<setting name="someSetting" serializeAs="String">
<value>I wanna be replaced</value>
</setting>
</Name.Of.Assembly.Properties.Settings>
</applicationSettings>
Run Code Online (Sandbox Code Playgroud)
而declare参数xml如下所示:
<parameter name="XX" defaultValue="default">
<parameterEntry kind="XmlFile"
scope="Web\.config$"
match="/configuration/applicationSettings/Name.Of.Assembly.Properties.Settings/setting[@name='someSetting']/value" />
</parameter>
Run Code Online (Sandbox Code Playgroud)
msdeploy只支持替换属性值还是我做错了什么?
我无法弄清楚XPath本身是否应该受到指责,或者是否是特定的XPath实现使得这一点变得如此困难.问题 - 如何使用MSDeploy Parameters.xml文件更改名称空间中的XML元素? - 是我的灵感.
这是不起作用的基本示例.
XML:
<spring>
<objects xmlns="http://www.springframework.net">
<object id="CultureResolver" type="Spring.Globalization.Resolvers.SessionCultureResolver, Spring.Web">
<!--configure for server-->
<property name="DefaultCulture" value="en" />
</object>
</objects>
</spring>
Run Code Online (Sandbox Code Playgroud)
XPath的:
//spring/objects/object[@id='CultureResolver']/@type
Run Code Online (Sandbox Code Playgroud)
XPath查询不返回任何内容,而不是:
Spring.Globalization.Resolvers.SessionCultureResolver, Spring.Web
Run Code Online (Sandbox Code Playgroud)
我或许天真地希望以下方面有效.
修改后的XML:
<spring>
<spring:objects xmlns:spring="http://www.springframework.net">
<spring:object id="CultureResolver" type="Spring.Globalization.Resolvers.SessionCultureResolver, Spring.Web">
<!--configure for server-->
<spring:property name="DefaultCulture" value="en" />
</spring:object>
</spring:objects>
</spring>
Run Code Online (Sandbox Code Playgroud)
修改过的XPath查询:
//spring/spring:objects/spring:object[@id='CultureResolver']/@type
Run Code Online (Sandbox Code Playgroud)
此查询在我使用的在线测试程序中引发错误:
ERROR - Failed to evaluate XPath expression: org.apache.xpath.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace: spring
Run Code Online (Sandbox Code Playgroud)
修改后的XML:
<spring xmlns="" xmlns:spring="http://www.springframework.net">
<spring:objects>
<spring:object id="CultureResolver" type="Spring.Globalization.Resolvers.SessionCultureResolver, …Run Code Online (Sandbox Code Playgroud) 我的应用程序需要针对某些XML数据评估XPath表达式.表达式由用户在运行时提供.所以,我无法创建XmlNamespaceManager传递给XPathEvaluate因为我在编译时不知道前缀和名称空间.
是否有可能在xpath表达式中指定名称空间声明?