2017-07-14 64 views
0

我需要使用XSLT 2.0從XML字段中提取一些數據,我不知道這樣做的最佳方式。 這裏是我的XML值:XSLT轉換中的正則表達式?

<PayReaCom>[email protected]/11122/01/2017/[email protected]</PayReaCom> 

我需要[email protected][email protected]之間的一切;所以在這種情況下:

1267347323/11122/01/2017/REF1 

我試着用substring,但我不知道如何爲[email protected]設置限制。

我可以在這裏使用正則表達式嗎?

+0

會不會有永遠是兩個'AP @'字符串,一個在一開始,一個在他結束?如果是這樣,你可以簡單地切斷第一個和最後3個字符。 –

回答

2

假設PayReaCom元素是上下文節點,打印所需的 片段,可以使用:

<xsl:value-of select="substring-before(substring-after(., '[email protected]'), '[email protected]')"/> 

首先substring-after功能 「切斷」 的初始[email protected](以及之前的任何東西 )。 然後這個函數的結果由substring-before函數處理, 「切斷」第二個[email protected](以及之後的任何事件)。

或者,如果你想保存此子在一個變量,使用方法:

<xsl:variable name="yourName" .../> 

與上面的select條款。

1

在XSLT 2.0中,你可以做簡單:

tokenize($string, '[email protected]')[2] 

返回第一和[email protected]分隔的第二齣現之間的-的字符串。


例如,給定:

<PayReaCom>[email protected]@charlie</PayReaCom> 

指令:

<xsl:value-of select="tokenize(PayReaCom, '[email protected]')[2]" /> 

將返回:

bravo 
+0

你認爲這將是最快的方式嗎? – doublemc

+0

我不希望看到*顯着*性能差異 - 但您需要使用實際的生產環境自己測試這些事情。 –