Velocity模板引擎如何输出XML

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)
  • 不建议直接写 $book.content(若 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 类型。