相关疑难解决方法(0)

用msdeploy参数替换web config*elements*

我们正在使用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只支持替换属性值还是我做错了什么?

web-config msdeploy

20
推荐指数
1
解决办法
6254
查看次数

是否需要在根元素中声明XML命名空间以便通过XPath查询进行匹配?

我无法弄清楚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 namespaces

8
推荐指数
1
解决办法
3831
查看次数

在XPath表达式中声明名称空间

我的应用程序需要针对某些XML数据评估XPath表达式.表达式由用户在运行时提供.所以,我无法创建XmlNamespaceManager传递给XPathEvaluate因为我在编译时不知道前缀和名称空间.

是否有可能在xpath表达式中指定名称空间声明?


评论的答案:

  1. XML数据有一个默认命名空间,但可以有嵌套元素和任何命名空间.用户知道他使用的数据的名称空间.
  2. 用户提供的xpath表达式将针对许多XML文档进行评估,并且每个文档都可以为相同的名称空间提供自己的前缀.

.net c# xelement xpath xml-namespaces

4
推荐指数
2
解决办法
2364
查看次数

标签 统计

xpath ×2

.net ×1

c# ×1

msdeploy ×1

namespaces ×1

web-config ×1

xelement ×1

xml ×1

xml-namespaces ×1