为什么 Freemarker Template 不解析带命名空间的 xml

问题描述 投票:0回答:1

我之前的问题在这里得到了解答

如何在body函数中分离freemarker中的XML标签

但是我的 xml 带有名称空间,但是当我尝试在模板中添加名称空间时,它不会解析我的 xml 数据。下面是我修改后的模板和示例 xml 以及预期输出。

<#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["name(./*)"]} : ${d[".//D:AddressLineText"]}
    }
 </#list>       
    ]
}

示例 Xml

<MESSAGE >
 <DEALS>
  <DEAL>
    <AddressLineText>Addr1</AddressLineText>
   </DEAL>
   <DEAL>
    <AddressLineText>Addr2</AddressLineText>
   </DEAL>
  </DEALS>
 <DOCUMENT_SETS>
  <DEALS>
    <DEAL>
        <LateChargeAmount>110</LateChargeAmount>
    </DEAL>
   </DEALS>
  </DOCUMENT_SETS>
 </MESSAGE>

预期产量

  {
  "loans": [
      {
          AddressLineText : Addr1
       },
        {
     AddressLineText : Addr2
        }
       ]
    }
xml xpath freemarker
1个回答
0
投票

您显示的 XML 中的元素不属于

http://www.test.org/
命名空间。它们不属于任何名称空间。因此,只需从查询中删除所有
D:
ns_prefixes={"D": "http://www.test.org/"}
,然后就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.