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

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

我正在尝试编写一个 freemarker 函数来解析 xml,但我想避免从 xml 中设置特定的 XPATH。

如果 xml 没有 DOCUMENT_SETS ,下面的 freemarker 就可以工作。但我的 xml 带有 DOCUMENT_SETS,当我调用 body["MESSAGE//DEALS"] 时,我无法避免这些标签。当下面的 xml 中有 DOCUMENT_SETS 标记时,我的列表为空。

<#assign DEALS = body["MESSAGE//DEALS"]>
{
loans:[
 <#list DEALS as d>
    {
        Address1 : ${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>

我如何只能在 MESSAGE//DEALS 下获得 DEAL,我完全想避免 DOCUMENT_SETS 标签。

预期产量

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

尝试将您的模板更改为

<#assign DEALS = someXML["MESSAGE//DEALS[following-sibling::DOCUMENT_SETS]/DEAL"]>
    {
    loans:[
     <#list DEALS as d>
        {
             ${d["name(./*)"]} : ${d["./AddressLineText"]}
        }
     </#list>       
        ]
    }

根据您的示例 xml,我得到的输出是:

{
loans:[
    {
         AddressLineText : Addr1
    }
    {
         AddressLineText : Addr2
    }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.