Velocity模板可安全生成XML,需显式声明UTF-8编码、用#escape.xml()转义动态内容、避免属性值未转义、区分注释语法、CDATA内不解析Velocity语法,并设置Content-Type响应头。

Velocity 模板引擎本身不强制输出任何特定格式,但可以安全、规范地生成 XML 内容,关键在于正确处理字符转义、编码声明和结构合法性。
确保 XML 声明与编码正确
在模板开头显式写出 XML 声明,并指定 UTF-8 编码(推荐),避免解析器因默认编码不一致报错:
使用 #escape.xml() 转义动态内容
Velocity 自带的 #escape.xml() 工具方法会将特殊字符(如 、>、&、"、')转换为对应 XML 实体,防止破坏结构或引发注入问题:
#escape.xml($book.title) #escape.xml($book.author) - 不建议直接写
(若 content 含$book.content 会破坏 XML)
避免模板语法与 XML 标签冲突
Velocity 的 # 和 $ 符号本身不会干扰 XML,但需注意:
- 不要在 XML 标签属性值中直接拼接未转义变量(如
→ 改用) - 注释用 Velocity 注释
## 这是 Velocity 注释,而非 XML 注释(除非你明确需要它出现在输出中) - CDATA 区块内不解析 Velocity 语法:
→ 此处$x不会被替换
设置响应头(服务端场景)
若通过 Web 框架(如 Spring MVC)渲染 Velocity 输出 XML,需确保 HTTP 响应头包含:
Content-Type: application/xml; charset=UTF-8否则浏览器或客户端可能误判编码或 MIME 类型。










