You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Thymeleaf注入带可变参数的XML处理指令

在Thymeleaf中生成带可变属性的XML处理指令

嘿,这个需求确实有点小众,但其实可以通过Thymeleaf的文本输出特性轻松实现。因为Thymeleaf没有专门为XML处理指令(PI)提供原生标签,我们可以用两种靠谱的方式达成目标:

方法一:使用th:utext输出未转义的拼接字符串

这种方法的核心是手动构建处理指令的完整字符串,再通过th:utext(Unescaped Text)输出,避免Thymeleaf自动转义特殊字符。示例代码如下:

<A>
  <span th:utext="'&lt;?foo bar=&quot;' + ${#strings.escapeXml(barValue)} + '&quot; ?&gt;'"></span>
</A>

细节说明:

  • &lt; 和 &gt; 是XML中<和>的转义字符,直接写原字符会导致XML模板语法错误
  • &quot; 是双引号的转义字符,用来合法包裹处理指令的属性值
  • ${#strings.escapeXml(barValue)} 用来转义变量中的特殊字符(比如双引号、尖括号),避免生成不合法的XML结构

方法二:使用文本内联(th:inline="text")

这种方式更简洁直观,直接在XML处理指令中插入变量,通过内联表达式完成替换:

<A th:inline="text">
  <?foo bar="[[${#strings.escapeXml(barValue)}]]" ?>
</A>

细节说明:

  • th:inline="text" 告诉Thymeleaf开启文本内联模式,允许在普通文本中使用[[${...}]]表达式
  • [[${...}]] 会自动替换为变量值,搭配#strings.escapeXml()能保证变量中的特殊字符不会破坏XML结构

两种方法最终都会生成你需要的XML结构:

<A> <?foo bar="baz" ?> </A>

(当barValue变量的值为baz时)

内容的提问来源于stack exchange,提问作者Kent Munthe Caspersen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:59:37