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

FreeMarker多命名空间场景下如何正确获取XML节点值?

解决FreeMarker多命名空间XML节点取值问题

问题分析

你的模板存在两个关键问题:

  1. 命名空间URL拼写错误:模板里的https://exampl2.com/abc少写了一个e,应该和XML中的https://example2.com/abc完全一致,否则无法匹配到目标命名空间的节点。
  2. 节点访问方式错误:直接调用uu["ns1:name"]返回的是节点序列(NodeListModel),FreeMarker无法自动将序列转换为字符串输出,需要明确指定获取文本内容或序列中的元素。

正确模板写法

方法1:直接提取节点文本内容

<#ftl ns_prefixes={"D": "https://example.com/xyz", 
                    "ns1": "https://example2.com/abc"}>

<#assign uu= pp.doc["D:user1"]>
${uu["ns1:name"].text}

方法2:获取序列第一个元素后输出

<#ftl ns_prefixes={"D": "https://example.com/xyz", 
                    "ns1": "https://example2.com/abc"}>

<#assign uu= pp.doc["D:user1"]>
${uu["ns1:name"][0]}

说明

  • 修正命名空间URL后,FreeMarker才能正确关联XML中的ns1命名空间节点。
  • .text属性会直接提取节点的文本内容,适合确定节点仅包含文本的场景。
  • [0]是因为FreeMarker会将匹配到的节点封装为序列(即使只有一个节点),取序列第一个元素后可自动转换为字符串输出。

内容的提问来源于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 22:55:16