如何将 instr/substr 转换为 if-then-else 函数?

问题描述 投票:0回答:2

在 BI Publisher 中,我正在调整一个模板,该模板使用 Word 中的扩展 XSL 显示销售订单。每个销售订单都有一个不同的前缀,例如'SAMPLE_'、'ECOM_'、'B2B_' 等或无前缀。需要删除前缀。如果销售订单编号没有这些前缀之一,则应按原样显示。

我已经弄清楚了产生预期结果的第一部分。

<?xdofx:substr(HEADER_SALES_ORDER,Instr(HEADER_SALES_ORDER,'_',-1) +1,length(HEADER_SALES_ORDER)-Instr(HEADER_SALES_ORDER,'_',-1))?>

但是,我尝试添加 if-then-else 函数的尝试不起作用,因为语法不正确。我不确定我哪里错了。

<?xdofx:if instr(HEADER_SALES_ORDER, 'SAMPLE_', 'ECOM_', 'B2B_') = 1)
then substr(HEADER_SALES_ORDER,Instr(HEADER_SALES_ORDER,'_',-1) +1,length(HEADER_SALES_ORDER)-Instr(HEADER_SALES_ORDER,'_',-1)) else HEADER_SALES_ORDER?>
xslt xslt-1.0 bi-publisher
2个回答
0
投票

INSTR 函数最多只能接受 3 个输入参数,您一开始使用它的方式似乎不正确。您必须在 if 条件中添加 OR 运算符来检查所有三个前缀。这在 oracle sql REGEX 中很容易完成,但在 xdo 中不可用。

这可能有用

<?xdofx:if instr(HEADER_SALES_ORDER, 'SAMPLE_') OR instr(HEADER_SALES_ORDER, 'ECOM_') OR instr(HEADER_SALES_ORDER, 'B2B_')  then substr(HEADER_SALES_ORDER,Instr(HEADER_SALES_ORDER,'_',-1) +1,length(HEADER_SALES_ORDER)-Instr(HEADER_SALES_ORDER,'_',-1)) else HEADER_SALES_ORDER?>

0
投票

如果某些标题有“”并且您想获取该字符之后的内容,而没有“”的标题应保持原样 - 您可以尝试以下操作:

<xsl:value-of select="concat(substring-after(HEADER_SALES_ORDER, '_'), HEADER_SALES_ORDER[substring-after(., '_')=''])"/>

对于一些虚拟数据

<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Oracle BI Publisher 12.2.1.4.0 -Dataengine, datamodel:__rakicd_user_temp_59a70a9a_bb5f_4058_8fd1_2edeefb375bc_xdm -->
<DATA_DS>
<G_1>
<HEADER_SALES_ORDER>SAMPLE_101</HEADER_SALES_ORDER><COL_1>some text 1</COL_1>
</G_1>
<G_1>
<HEADER_SALES_ORDER>SAMPLE_102</HEADER_SALES_ORDER><COL_1>some text 2</COL_1>
</G_1>
<G_1>
<HEADER_SALES_ORDER>ECOM_103</HEADER_SALES_ORDER><COL_1>some text 3</COL_1>
</G_1>
<G_1>
<HEADER_SALES_ORDER>B2B_104</HEADER_SALES_ORDER><COL_1>some text 4</COL_1>
</G_1>
<G_1>
<HEADER_SALES_ORDER>105</HEADER_SALES_ORDER><COL_1>some text 5</COL_1>
</G_1>
<G_1>
<HEADER_SALES_ORDER>106</HEADER_SALES_ORDER><COL_1>some text 6</COL_1>
</G_1>
</DATA_DS>

结果为

<!--  R e s u l t :
101         some text 1
102         some text 2
103         some text 3
104         some text 4
105         some text 5
106         some text 6
-->
© www.soinside.com 2019 - 2024. All rights reserved.