跳到主要内容

Xpl

提示
  • Nop 平台还处于开发阶段, 本文档中的实践方案可能会部分失效,但本人精力有限,无法及时跟进,请自行按照最新代码调整;
  • 您可以与 DeepWiki 进行问答互动(支持中文)以深入学习 Nop 平台的设计与实现;
  • 若此文对您有很大帮助,请投币支持一下吧;
版权声明

Xpl 是一种采用 XML 语法格式,支持元编程、支持多种输出模式, 与 EL 表达式(XScript 脚本语言)紧密结合的一种模板语言。 通过自定义标签,Xpl 可以引入新的语法结构,实现多种 DSL 的无缝嵌套。

Xpl 上下文内置变量

变量/函数变量名称(返回)值类型使用范围
location()当前执行代码所在的位置信息

SourceLocation

  • 可在 Xpl 脚本内的任意位置调用
_dsl_model解析 DSL 文件得到的 Java 模型对象

IComponentModel

  • 该变量定义在 ExprConstants#SYS_VAR_DSL_MODEL
  • 使用参考 Nop 模块 nop-xdefs 中的 /nop/schema/xui/xview.xdef
_dsl_root当前 DSL 的根节点

XNode

_xpl_node当前节点

XNode

logInfo()日志打印

  • 可在 Xpl 脚本内的任意位置调用
logInfo("nop.err.invalid-name:name={}", name);
  • 第一个参数必须是静态字符串,不允许 "sss"+yyy 这种形式,从而也避免了 log 注入攻击;
  • 其余相关不同级别的日志打印函数为 logTrace()logDebuglogWarnlogError
xx.$("xxx")调试打印

  • 可在 Xpl 脚本内的任意位置对任意表达式进行调用
b = a.f().$("test");

以上调用等价于 b = DebugHelper.v(location(), "test",a.f());, 其中,test 表示自定义的提示信息。在需要查看表达式的值时,可以在其后增加 $ 调用。其打印出的调试信息如下:

21:00:01.686 [main] INFO io.nop.xlang.utils.DebugHelper - test:a.f()=>1,loc=[6:8:0:0]/path/to/xxx.xlib
  • test 为自定义前缀信息;
  • a.f() 为待查看的表达式源码;
  • => 1 表示表达式的返回值为 1
  • loc 对应于调试语句所对应的源码位置;