我正在尝试编写一个 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
}
]
}
尝试将您的模板更改为
<#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
}
]
}