提问者:小点点

xml:混合命名空间-我可以使用thymeleaf处理XSL-FO文件吗?


我想做的是使用thymeleaf模板处理器来解析和执行FO文档的变量替换。对我来说,从概念上讲,这应该是可行的——FO文档是一个有效的xml文件,所以我应该能够通过thymeleaf引擎运行它并让它替换节点值(例如)。我似乎不能做的是适当地混合命名空间。有人能告诉我正确的语法是什么吗?

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
      xmlns:th="http://www.thymeleaf.org"
      font-size="3.6mm" font-family="Courier">
    <!--/*@thymesVar id="model" type="mypackage.Model"*/-->
    <fo:layout-master-set>
 ...
         <fo:table-cell>
             <fo:block th:text="${model.county}">
                  Chittenden
             </fo:block>
         </fo:table-cell>

还是我想的完全错了?


共1个答案

匿名用户

我知道已经太迟了,但我想分享答案,以便其他人可以参考。

您可以很好地使用thymeleaf来处理您的FO文件。在您的情况下

<fo:block th:text="${model.county}">
     Chittenden
</fo:block>

在这里,您已经为标签提供了文本内容。因此,您不需要显式提供文本内容,Thymeleaf将处理您的th: text="${model.县}"并将其替换为您的文本内容。

因此,正确的用法应该是

<fo:block th:text="${model.county}"/>

还有,

您的Thymeleaf处理器引擎应配置如下,

@Bean
public SpringResourceTemplateResolver templateResolver() {
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
    templateResolver.setTemplateMode(TemplateMode.XML);
    templateResolver.setPrefix("classpath:/templates/");
    templateResolver.setSuffix(".fo");
    return templateResolver;
}

@Bean
public TemplateEngine templateProcessorEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setEnableSpringELCompiler(true);
    templateEngine.setTemplateResolver(templateResolver());
    return templateEngine;
}