2013-07-18 52 views
-1

所有, 我在字段列表那些誰擁有CLOB類型,我寫它通過這樣一個逗號separed搜索[字段1,字段2,...字段N]在xslt中管理標誌?

我的問題是如何識別第一個匹配的字段寫無逗號(我不能使用位置(),因爲匹配的第一個字段可以是列表的第一個或列表的最後一個)

我想在xslt,

variable is_first = TRUE; 

if(is_first) { 
    do smthng; 
    isfirst = False; 
} 
+3

你問「我該如何實現這個算法」。一個更好的問題是「這是我試圖解決的問題,我應該使用什麼算法」。 –

+0

我試着根據你的問題編輯改進我的答案。 –

回答

1

其實在xslt中做這樣的事情是不可能的,因爲變量e是不可變的。可能會有解決方法,但您必須更詳細地指定您的需求。

編輯:

如果輸入字符串是用逗號分隔值...

<xsl:variable name="inputString" select="'field1,field2,field3a,field4,field3b'" /> 

...你可以使用tokenize()功能...

<xsl:variable name="tokenized" select="tokenize($inputString, ',')" /> 

.. 。然後選擇對應您的條件的項目

<!-- Select item corresponding to condition (e.g. it contains 3). Take first one if there are several such items --> 
<xsl:value-of select="$tokenized[contains(., '3')][1]" /> 

EDIT2:

可以使用的xsl:value-of(XSLT 2.0),用於分隔的值輸出separator屬性。

假設以下變量

<xsl:variable name="list"> 
    <item>first</item> 
    <item>second</item> 
    <item>third</item> 
</xsl:variable> 

<xsl:value-of select="$list/item" separator="," />使得期望的輸出first,second,third

+0

實際上要解釋更多:我想要一個輸出「field1,field2 ... fieldn」不是輸入,我的問題是如何在字段之間寫入逗號xsl – Aymanadou

+0

我已經離開了一段時間,很抱歉以後響應。我改進了我的答案 - 請檢查它。 –

-1

需要編寫此使用功能碼,而不是程序代碼。在沒有看到上下文的情況下進行轉換是不可能的(從問題開始而不是從低級語言的解決方案開始工作要容易得多)。

但在XSLT最常見相當於將採取的形式

<xsl:for-each select="....."> 
    <xsl:if test="position() = 1"><!-- first time code --></xsl:if> 
    .... 
</xsl:for-each> 
+0

如果只有第一個匹配元素是列表中的第一個元素(position()= 1),那麼第一個匹配的元素是(position()= 6),這就是爲什麼我要搜索激活第一個標誌 – Aymanadou

+1

那麼,如果你打算低估我的回答,因爲我沒有猜到那些不在問題中的信息,那麼我就會在這個問題上低估這個問題。 –

+0

我以爲你起初做過:)沒關係 – Aymanadou