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

XML命名空间与FreeMarker模板协同使用问题求助

解决FreeMarker处理带默认命名空间XML的节点访问问题

当XML使用默认命名空间(xmlns="https://example.com/xyz")时,FreeMarker默认的节点查找逻辑不会自动关联这个命名空间,导致你原来的pp.doc.user1.name路径无法匹配到任何节点,最终返回空序列触发报错。

关键解决步骤

  1. 声明命名空间前缀映射
    在FTL模板开头通过#ftl指令明确命名空间与前缀的映射:
<#ftl ns_prefixes={"ns": "https://example.com/xyz"}>
  1. 使用前缀访问所有命名空间下的节点
    XML中所有未指定前缀的节点(包括根节点user1和子节点name)都属于默认命名空间,必须通过声明的前缀来访问:
${pp.doc.ns:user1.ns:name}

完整可运行示例

修改后的FTL模板:

<#ftl ns_prefixes={"ns": "https://example.com/xyz"}>
${pp.doc.ns:user1.ns:name}

对应带默认命名空间的XML:

<?xml version="1.0" encoding="UTF-8" ?>
<user1 xmlns="https://example.com/xyz">
    <name>Jack</name>
</user1>

核心原因说明

FreeMarker处理XML时,不带前缀的节点查找仅匹配无命名空间的节点。当XML设置了默认命名空间后,所有未显式指定前缀的节点都会归入该命名空间,必须通过声明的前缀明确指定节点所属的命名空间,否则会被视为无命名空间节点,导致查找失败。

内容的提问来源于stack exchange,提问作者user3768495

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:50:24