【发布时间】:2020-06-10 20:29:08
【问题描述】:
我们的目标是输入一个 xml(string) 和一个 json(string) 作为输入,并从中构建一个带有 thymeleaf 的模板。配置:
@Bean
StringTemplateResolver xmlTemplateResolver(ApplicationContext appCtx) {
StringTemplateResolver templateResolver = new StringTemplateResolver();
templateResolver.setTemplateMode(TemplateMode.XML);
return templateResolver;
}
@Bean(name="springTemplateEngine")
SpringTemplateEngine templateEngine(ApplicationContext appCtx) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(xmlTemplateResolver(appCtx));
return templateEngine;
}
这是用法:“schema”是 xml 字符串,“json”是带有键:值对的 json 字符串
@Autowired
SpringTemplateEngine springTemplateEngine;
...
Context context = new Context();
ObjectMapper mapper = new ObjectMapper(new JsonFactory());
Map<String, Object> map = mapper.readValue(json, new TypeReference<Map<String,Object>>(){});
for (Map.Entry<String, Object> entry : map.entrySet()) {
context.setVariable(entry.getKey(),entry.getValue());
}
String content = springTemplateEngine.process(schema, context);
替换工作正常,但 ö,ü,ä 等单词的编码不起作用。我猜它不是 UTF-8 编码的,我不知道如何使用 StringTemplateResolver 来做到这一点。我寻找其他解析器,但他们似乎都想要一个文件作为输入。我只是有一个输入作为输入,我不想从中构建一个文件作为解决方法。我正在寻找一种解决方案,在不构建文件的情况下使用 UTF-8 对我的 xml 字符串进行编码。
你有什么想法吗?
编辑 这是一个示例Json
{
"vorgang": {
"vorgangsid":"12345678",
"datum":"2020-06-10"
},
"val":"toller Wert üöä",
"personen": [
{
"name":"Müller",
"vorname":"Klaus"
},{
"name":"Mälzer",
"vorname":"Mürte"
}
]
}
这是一个示例架构
<?xml version="1.0" encoding="UTF-8"?>
<Schema>
<was th:text="${val}"></was>
<vorgang>
<VorgangsID th:text="${vorgang['vorgangsid']}"></VorgangsID>
<Anlagedatum th:text="${vorgang['datum']}"></Anlagedatum>
<wert> ü ö ä</wert>
</vorgang>
<Personen th:each="person : ${personen}" >
<Person>
<name th:text="${person.name}" ></name>
<vorname th:text="${person.vorname}" ></vorname>
</Person>
</Personen>
</Schema>
这是预期的结果
<?xml version="1.0" encoding="UTF-8"?>
<Schema>
<was>toller Wert üöä</was>
<vorgang>
<VorgangsID>12345678</VorgangsID>
<Anlagedatum>2020-06-10</Anlagedatum>
<wert> ü ö ä</wert>
</vorgang>
<Personen >
<Person>
<name >Müller</name>
<vorname >Klaus</vorname>
</Person>
</Personen>
<Personen >
<Person>
<name >Mälzer</name>
<vorname >Mürte</vorname>
</Person>
</Personen>
</Schema>
这是实际结果
<?xml version="1.0" encoding="UTF-8"?>
<Schema>
<was>toller Wert üöä</was>
<vorgang>
<VorgangsID>12345678</VorgangsID>
<Anlagedatum>2020-06-10</Anlagedatum>
<wert> ü ö ä</wert>
</vorgang>
<Personen >
<Person>
<name >Müller</name>
<vorname >Klaus</vorname>
</Person>
</Personen>
<Personen >
<Person>
<name >Mälzer</name>
<vorname >Mürte</vorname>
</Person>
</Personen>
</Schema>
所有 üöä 的格式都不正确。
【问题讨论】:
-
欢迎来到 Stack Overflow。请edit您的问题提供minimal reproducible example。这应该包含 xml 和 json 字符串的(清理)示例以及失败和预期的输出。那些 xml 和 json 字符串是从哪里来的?
-
我添加了一个例子,感谢欢迎:)
-
抱歉,我不知道如何在 thymeleaf 中 unescape a XML numeric character entity reference... 可能是
th:text=分配的东西。可能是获取/读取 Json 字符串的东西? -
我可以用 th:utext= 谢谢解决我的问题