在字符串比较中获取xslt中if条件的错误

时间:2016-07-27 08:38:32

标签: oracle xslt plsqldeveloper

我正在尝试将节点的值与字符串进行比较,但是它会抛出错误,如下所示:

  

ORA-06550:第264行,第40栏:PLS-00103:遇到符号“Y”   期待以下之一:

     

_ = - +;在in是mod余数而不是rem    <>或!=或〜=> =< =<>或者喜欢喜欢2   like | likec之间的|| multiset成员submultiset   在“Y”之前插入符号“以继续。

以下是我的代码:

<xsl:if test="/email/threshold/text() = 'Y'">

如果我从“Y”中删除单引号,则不满足条件。我错过了什么? 使用下面的代码也行不通。

<xsl:if test="not(normalize-space(email/threshold)=N)">

1 个答案:

答案 0 :(得分:1)

可能的解释是,您显示的片段是字符串文字的一部分,在这种情况下,您需要转义Y周围的单引号(因此第一个单引号不会被解释为该字符串的结尾,将Y孤立的字符串留在字符串之外):

<xsl:if test="/email/threshold/text() = ''Y''">

或使用the alternative quoting mechanism,因此无需转义。

您可以通过简单的匿名块看到相同的内容:

declare
  x varchar2(200);
begin
 x:='...
<xsl:if test="/email/threshold/text() = 'Y'">
...';
end;
/

Error report -
ORA-06550: line 5, column 42:
PLS-00103: Encountered the symbol "Y" when expecting one of the following:
...

但是其中任何一个编译都可以:

declare
  x varchar2(200);
begin
 x:='...
<xsl:if test="/email/threshold/text() = ''Y''">
...';
end;
/

declare
  x varchar2(200);
begin
 x:=q'|...
<xsl:if test="/email/threshold/text() = ''Y''">
...|';
end;
/

..后者使用条形符号|作为 quote_delimiter