我是freemarker中的新手,并且需要遍历xml中使用自由标记的递归节点。
以下是示例xml文件的示例:
<?xml version="1.0" encoding="UTF-8"?>
<Order>
<OrderNumber>100001</OrderNumber>
<Source>XYZ</Source>
<OrderSublineNumber>7</OrderSublineNumber>
<OrderSublineType>ADD</OrderSublineType>
<OrderlineInstance>125</OrderlineInstance>
<Lob>MOB</Lob>
<Order>
<OrderNumber>100001</OrderNumber>
<Source>XYZ</Source>
<OrderSublineNumber>7</OrderSublineNumber>
<OrderSublineType>ADD</OrderSublineType>
<OrderlineInstance>125</OrderlineInstance>
<Lob>MOB</Lob>
<Order>
<OrderNumber>100001</OrderNumber>
<Source>XYZ</Source>
<OrderSublineNumber>7</OrderSublineNumber>
<OrderSublineType>ADD</OrderSublineType>
<OrderlineInstance>125</OrderlineInstance>
<Lob>MOB</Lob>
</Order>
</Order>
</Order>
Freemarker我试图实现它:
<#macro test>
<ModifyRequest xmlns="http://soa.comptel.com/2011/02/instantlink">
<RequestHeader>
<NeType>BST</NeType>
<OrderNo>${orderSubline.orderNo}</OrderNo>
<ReqUser>${orderSubline.source}</ReqUser>
</RequestHeader>
<RequestParameters>
<Parameter name="ACT_CODE1" value="${orderSubline.orderSublineNumber}"/>
<Parameter name="REQ_TYPE" value="${orderSubline.orderSublineType}" />
<Parameter name="ORDER_INSTANCE" value="${orderSubline.orderlineInstance}" />
<Parameter name="LOB" value="${orderSubline.lob}"/>
</RequestParameters>
</ModifyRequest>
</#macro>
<@test/>
这给了我最后的<ORDER>
标记值,因为我需要迭代所有嵌套的xml <ORDER>
标记。请建议我如何使用freemarker实现这一目标。
答案 0 :(得分:0)
您的示例很奇怪,因为元素以XML中的大写字母开头,但不是在FTL中。所以我不确定XML在该项目中如何向FreeMarker公开。无论如何,我认为orderSubline
是数据模型(顶级变量)的一部分,并且对应于顶部Order
元素。您可以将Order
元素作为参数呈现给宏,而不是从宏内的数据模型中获取Order
元素。与<#macro test orderSubline>
相同,然后是<@test orderSubline />
。因此,在宏内部,宏可以为嵌套的Order
调用自己,如:
<#if orderSubline.order[0]??>
<@test orderSubline.order />
</#if>