XPath在路径中间使用字符串函数

时间:2012-09-06 21:04:49

标签: xpath web-deployment webdeploy

我正在尝试使用Web Deploy 3.0在部署之前对我的web.config进行更改。假设我有以下xml:

<node>
    <subnode>
        <connectInfo httpURL="http://LookImAUrl.com" />
    </subnode>
<node>

我想只匹配“http:// ...”中的“http”,以便我可以用https替换它。

我查看了XPath字符串函数并理解它们 - 我只是不知道如何将它们放在表达式的中间,例如:

"//node/subnode/connectInfo/@httpURL/substring-before(../@httpURL,':')" 

这基本上就是我想要做的,但看起来不对。

2 个答案:

答案 0 :(得分:1)

 "//node/subnode/connectInfo/@httpURL/substring-before(../@httpURL,':')" 
     

这基本上就是我想要做的,但看起来不对。

但它是正确的,将匹配http。

(顺便说一下,没有..你可以写得更短。

    //node/subnode/connectInfo/@httpURL/substring-before(.,':')

但是,它将返回字符串“http”,而不是某种指向@httpUrl值的指针,这是不可能的,因为值中没有部分节点。

(在XPath 2中),你可以返回属性和一个新值,然后可能用调用语言改变它

    //node/subnode/connectInfo/@httpURL/(., concat("https:", substring-after(.,':')))

答案 1 :(得分:1)

使用XPath 1.0,如果要返回URL的初始部分,请使用:

substring-before(//node/subnode/connectInfo/@httpURL,':')

请注意,这将仅返回第一个connectInfo元素的值。

如果要获取使用HTTP的connectInfo节点:

//node/subnode/connectInfo[starts-with(@httpURL,'http:')]

如果您希望获得使用HTTP的所有httpURL

//node/subnode/connectInfo/@httpURL[starts-with(.,'http:')]
相关问题