使用freemarker的嵌套xml标签遍历
Posted
技术标签:
【中文标题】使用freemarker的嵌套xml标签遍历【英文标题】:Nested xml tag traversal using freemarker 【发布时间】:2016-06-26 16:08:31 【问题描述】:我是freemarker的新手,有一个需求需要遍历xml中的递归节点,使用freemarker。
这里是示例 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 实现这一目标。
【问题讨论】:
【参考方案1】:您的示例很奇怪,因为元素在 XML 中以大写字母开头,但在 FTL 中却没有。所以我不确定 XML 在那个项目中是如何暴露给 FreeMarker 的。无论如何,我想orderSubline
是数据模型(***变量)的一部分,并且对应于顶部Order
元素。您可以将Order
元素作为参数传递给宏,而不是从宏内部的数据模型中获取Order
元素。比如<#macro test orderSubline>
,然后是<@test orderSubline />
。因此,在宏内部,宏可以为嵌套的Order
调用自身,例如:
<#if orderSubline.order[0]??>
<@test orderSubline.order />
</#if>
【讨论】:
以上是关于使用freemarker的嵌套xml标签遍历的主要内容,如果未能解决你的问题,请参考以下文章