使用中间变量的 JSLT 表达式无法编译

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

我正在尝试使用 com.schibsted.spt.data 在 Java 中编译 JSLT 表达式。该表达式需要中间变量,但我遇到了编译错误。

这就是我尝试过的:

String jsltExpression = "let parts = split(.id, \"/\") { \"result\": parts[1] + parts[3] }";
Expression jslt = Parser.compileString(jsltExpression);

错误:

com.schibsted.spt.data.jslt.JsltException: Parse error: Encountered " "[" "[ "" at line 1, column 46.
Was expecting:
    "(" ...
     at <inline>:1:41
    at com.schibsted.spt.data.jslt.parser.ParserImpl.compileExpression(ParserImpl.java:62)
    at com.schibsted.spt.data.jslt.Parser.compile(Parser.java:226)
    at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:86)
    at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:74)

还尝试过:

String jsltExpression = "{ \"result\": let(parts = split(.id, \"/\")) parts[1] + parts[3] }";
Expression jslt = Parser.compileString(jsltExpression);

错误:

com.schibsted.spt.data.jslt.JsltException: Parse error: Encountered " "let" "let "" at line 1, column 13.
Was expecting one of:
    <INTEGER> ...
    <DECIMAL> ...
    <STRING> ...
    "[" ...
    "{" ...
    "true" ...
    "false" ...
    "." ...
    "if" ...
    "(" ...
    <IDENT> ...
    <PIDENT> ...
    <VARIABLE> ...
     at <inline>:1:11
    at com.schibsted.spt.data.jslt.parser.ParserImpl.compileExpression(ParserImpl.java:62)
    at com.schibsted.spt.data.jslt.Parser.compile(Parser.java:226)
    at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:86)
    at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:74)

是否可以使用 com.schibsted.spt.data 编译类似的 Expressien?或者有什么限制吗?

java jslt
1个回答
0
投票

您必须使用

$
来访问
parts
值,如下所示:

String jsltExpression = "let parts = split(.id, \"/\") { \"result\": $parts[1] + $parts[3] }";

您可以在 Playground 中尝试 jslt 表达式(https://www.garshol.priv.no/jslt-demo),它可以为您提供更多错误反馈。

© www.soinside.com 2019 - 2024. All rights reserved.