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

为何Freemarker模板无法解析带命名空间的XML?

解决FreeMarker解析带命名空间XML的问题

问题分析

原模板无法解析带默认命名空间的XML,核心问题在于XPath表达式定位不准确、命名空间下元素名称获取方式错误,以及JSON格式语法缺失。

修正后的模板

<#ftl ns_prefixes={"D": "http://www.test.org/"}>
<#assign DEALS = body["/D:MESSAGE/D:DEALS[following-sibling::D:DOCUMENT_SETS]/D:DEAL"]>
{
  "loans": [
    <#list DEALS as d>
      {
        "${d["local-name(./*)"]}" : "${d["D:AddressLineText"]}"
      }<#if d_has_next>,</#if>
    </#list>
  ]
}

修改说明

  1. 修正XPath定位:
    将递归查找的路径改为从根节点直接定位,避免误匹配,确保只选中DOCUMENT_SETS同级且在前的DEALS节点。
  2. 获取正确元素名称:
    使用local-name(./*)替代name(./*),获取不带命名空间前缀的元素本地名称,符合预期输出的键名要求。
  3. 修复JSON格式:
    • 补全数组起始符[,完善JSON结构
    • 为键名添加双引号,符合JSON语法规范
    • 用<#if d_has_next>,</#if>处理元素间逗号,避免最后一项多余逗号
  4. 简化路径写法:
    直接用D:AddressLineText定位子节点,路径更高效准确。

验证输出

使用提供的示例XML,修正后的模板将输出符合要求的JSON:

{
  "loans": [
      {
        "AddressLineText" : "Addr1"
      },
      {
        "AddressLineText" : "Addr2"
      }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:30:29