管理xslt中的标志?

时间:2013-07-18 13:24:11

标签: xslt xslt-2.0

全部, 我在一个字段列表中搜索那些具有类型clob的字段,我正在用这样的逗号分隔它[field1,field2,... fieldn]

我的问题是如何识别第一个匹配的字段来写它而不用逗号(我不能使用position(),因为匹配的第一个字段可以是列表的第一个字段或列表的最后一个字段)

我想在xslt,

中制作这个算法
variable is_first = TRUE;

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

2 个答案:

答案 0 :(得分:1)

实际上,由于变量是不可变的,因此不可能在xslt中创建类似的东西。可能有解决方法,但您必须更详细地说明您的需求。

编辑:

如果您的输入是字符串,其值由逗号分隔......

<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:

您可以使用separator({1}}(xslt 2.0)的xsl:value-of属性来输出分隔值。

假设有以下变量

<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

答案 1 :(得分:-1)

您需要使用功能代码而不是程序代码来编写它。如果没有看到上下文就不可能进行转换(从问题中解决问题要比使用低级语言的解决方案更容易)。

但是XSLT中最常见的等价物将采用

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