2012-09-06 17 views
1

我想在部署之前使用Web Deploy 3.0對我的web.config進行更改。比方說,我有以下XML:在路徑中間使用字符串函數的XPath

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

而且我想匹配只是「HTTP」中的「http:// ...」這樣我就可以潛在地以https替換它。

我看着XPath字符串函數和理解它們 - 我只是不知道如何把他們在中間的表達,例如:

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

這基本上就是我想做的事情,但它看起來不正確。

+0

你的表達是罰款了XPath 2.0,但不XPath 1.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(.,':'))) 
+0

當我嘗試加載xml時,它在XPath表達式中給了我一個'invalid token'錯誤。 –

+0

它可能不適用於XPath 1.0。我用XPath 2.0測試過,並且它沒有問題 – BeniBela

1

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

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

但請注意,這將只返回第一個connectInfo元素的值。

如果你想使用HTTP的connectInfo節點:如果你婉得到使用HTTP所有httpURL

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

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