所有,我正在搜索具有 clob 类型的字段列表,并且我正在编写它,并用逗号分隔,例如 [field1, field2, ... fieldn]
我的问题是如何识别第一个匹配的字段以在没有逗号的情况下编写它(我不能使用 position() 因为第一个匹配的字段可以是列表的第一个或列表的最后一个)
我想在 xslt 中制作这个算法,
variable is_first = TRUE;
if(is_first) {
do smthng;
isfirst = False;
}
实际上不可能在 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]" />
编辑2:
您可以使用(xslt 2.0) 的separator属性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
您需要使用功能代码而不是过程代码来编写它。在没有看到上下文的情况下进行转换是不可能的(从问题而不是从低级语言的解决方案中工作要容易得多)。
但是 XSLT 中最常见的等价物将采用以下形式
<xsl:for-each select=".....">
<xsl:if test="position() = 1"><!-- first time code --></xsl:if>
....
</xsl:for-each>