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

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









