使用freemarker进行嵌套的xml标记遍历

时间:2016-03-11 12:02:11

标签: java xml freemarker

我是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实现这一目标。

1 个答案:

答案 0 :(得分:0)

您的示例很奇怪,因为元素以XML中的大写字母开头,但不是在FTL中。所以我不确定XML在该项目中如何向FreeMarker公开。无论如何,我认为orderSubline是数据模型(顶级变量)的一部分,并且对应于顶部Order元素。您可以将Order元素作为参数呈现给宏,而不是从宏内的数据模型中获取Order元素。与<#macro test orderSubline>相同,然后是<@test orderSubline />。因此,在宏内部,宏可以为嵌套的Order调用自己,如:

<#if orderSubline.order[0]??>
  <@test orderSubline.order />
</#if>