gpt4 book ai didi

java - Freemarker - 从 flt 模板和 java 方法生成 xml

转载 作者:行者123 更新时间:2023-12-02 13:09:06 33 4
gpt4 key购买 nike

我对 Freemarker 和模板引擎总体来说还很陌生。基本上,我希望能够使用 java 方法将数据提供给模板来生成两个 XML 文件(来自两个不同的模板)。

例如:

  • myTemplate1.ftl 包含一个开始和结束的“res”标签 getRes()方法作为值(例如返回1)
  • myTemplate2.ftl 包含开始和结束“结果”标记并采用 getResult()方法作为值(例如返回2)

如何编写一个类 Main在不具体的情况下处理这个问题(我不想每行写一行,因为那样创建引擎就没有意义了)

如果可能的话,您能通过示例帮助我理解它是如何工作的吗?

问候

使用所有新信息进行编辑:

@fustaki 这非常令人沮丧。看来我需要一步一步来了解我在做什么。所以...这是一个非常愚蠢的例子来说明我的处境:

模板1.ftl

<Email>${item.getEmail()}</Email><Language>${item.getLanguage()}</Language>

FillMyTemplate1.java

public String getEmail(){ return "test@test.com" }
public String getLanguage(){ return "EN" }

我正在使用属性文件来使用内省(introspection):prop.properties 其中包含: template1=fr.freemarker.test.xml.FillMyTemplate1

MainTest.java

public static void main(String[] args) throws Exception {
Properties prop = new Properties();
InputStream input = new FileInputStream("prop.properties");
prop.load(input);
Class<?> classe = Class.forName(prop.getProperty(args[0])); //where args[0] is "template1"

Configuration config=new Configuration();
config.setClassForTemplateLoading(MainTest.class, "templates");
config.setObjectWrapper(new DefaultObjectWrapper());
Template template=config.getTemplate(args[0]+".ftl");

Map<String, Object> dataModel = new HashMap<String, Object>();
Writer consoleWriter = new OutputStreamWriter(System.out);
dataModel.put("item", classe.newInstance());
template.process(dataModel, consoleWriter);

}

结果:<Email>test@test.com</Email><Language>EN</Language>

为了理解你所说的,我需要知道在我的例子中“数据提供者”是什么样子?我怎样才能在我的 map 上乘坐这个“项目”?我了解原理,但不了解技术方案...

最佳答案

您的Main流程负责生成数据(ListMap或其他结构化对象),模板将使用 呈现 XML 的数据。模板中使用的标签独立于其中的数据。

示例,其中数据存储在 List 中,可以使用 getItems() 检索数据,或者通常可以从 freemarker 引擎访问数据。

<?xml>
<res>
<#list items as item >
<item>${item}</item>
</#list>
</res>

您可以使用相同的列表项创建任意数量的模板( View )。

我希望这能解决您的问题。

关于java - Freemarker - 从 flt 模板和 java 方法生成 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44027783/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com