FreeMarker生成XML需严格遵循XML语法并禁用HTML转义:1.模板开头用纯文本声明;2.通过!no_esc、或配置XMLOutputFormat.INSTANCE关闭自动转义。FreeMarker 生成 XML 的核心原则是:**确保输出内容严格符合 XML 语法规范,同时避免 FreeMarker 默认的 HTML 转义干扰 XML 字符(如 ``, `&`)**。以下是关键要点和实用写法:
用纯文本方式输出 XML 声明,FreeMarker 不会解析它:
XML 内容中标签必须原样输出,不能被 HTML 转义。有三种常用方式:
!no_esc:${user.name!no_esc}
...#noescape> 包裹一段区域:outputFormat 为 XMLOutputFormat.INSTANCE,这样 `${...}` 默认就不转义(但需确保变量内容本身是合法 XML 字符,不含未转义的 `
如果变量可能含 ``, `&`, `"`,
`'`,又不能依赖外部清理,可用内置函数转义:
${user.bio?xml} —— 对字符串做标准 XML 字符实体转义(`zuojiankuohaophpcn,`&` → & 等)?xml 只处理字符,不校验结构;它适合用于文本内容,**不能用于生成标签名或属性名**FreeMarker 本身不解析 XML 结构,所有 XML 构造都靠文本拼接,因此完全可控:
(注意:先 ?xml 转义内容,再包 CDATA 更安全)
或 ),建议用 避免意外空格破坏格式。