java script xml_使用java的script引擎动态转换填充xml

使用java的script引擎动态转换填充xml

近日,在做一个功能:根据xml模板动态填充数据生成xml,而xml的节点值或属性值,可能会动态根据需求而转换。

我想到了使用java的script引擎来做.

客户的需求文档其中:

Grain 表示纹理, 纹理 0=无;1=竖纹;2=横纹(影响排版时的旋转角度)

xml模板

code="${code}"

name="${name}"

Grain="${javascript:textureDir;if(textureDir=='vertical'){ '1';}else if(textureDir=='horizontal'){'2';}else{ '0';}}"

/>

然后写个测试script引擎的Test

package com.test;

import javax.script.*;

import java.util.HashMap;

import java.util.Map;

/**

* 测试java的javascript引擎

* @Project

* @Package com.test

* @FileName TestScriptEngine.java

* @ClassName TestScriptEngine

* @author ygw

* @date 2020/11/5 11:54

* @Description

*

*/

public class TestScriptEngine {

public static void main(String[] args) throws ScriptException {

//textureDir纹理:vertical=竖纹;horizontal=横纹;空值=无

Map partMap = new HashMap<>();

partMap.put("code", "20201105001");

partMap.put("name", "左侧板");

partMap.put("textureDir", "vertical");

ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("Nashorn");

//String s = "${javascript:textureDir;var r = ''; if(textureDir=='vertical'){ r = '1';}else if(textureDir=='horizontal'){r = '2';}else{r = '0';}; r }";

String xmlValue = "${javascript:textureDir;if(textureDir=='vertical'){ '1';}else if(textureDir=='horizontal'){'2';}else{ '0';}}";

xmlValue = xmlValue.substring(2, xmlValue.length()-1);

System.out.println("xmlValue=" + xmlValue);

String paramsStr = xmlValue.substring(xmlValue.indexOf(":")+1, xmlValue.indexOf(";"));

String script = xmlValue.substring(xmlValue.indexOf(";")+1);

System.out.println("params=" + paramsStr);

System.out.println("script=" + script);

Bindings bindings = new SimpleBindings();

String[] params = paramsStr.split(",");

for(String param: params){

bindings.put(param, partMap.get(param));

}

String result = (String) scriptEngine.eval(script, bindings);

System.out.println("Grain=" + result);

}

}

运行结果

xmlValue=javascript:textureDir;if(textureDir=='vertical'){ '1';}else if(textureDir=='horizontal'){'2';}else{ '0';}

params=textureDir

script=if(textureDir=='vertical'){ '1';}else if(textureDir=='horizontal'){'2';}else{ '0';}

Grain=1

[0x7FFB5A1E77A0] ANOMALY: meaningless REX prefix used

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值