【问题标题】:Nested xml tag traversal using freemarker使用freemarker的嵌套xml标签遍历
【发布时间】: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/>

这给了我最后一个 &lt;ORDER&gt; 标签值,因为我需要迭代所有嵌套的 xml &lt;ORDER&gt; 标签。请建议我如何使用 freemarker 实现这一目标。

【问题讨论】:

    标签: java xml freemarker


    【解决方案1】:

    您的示例很奇怪,因为元素在 XML 中以大写字母开头,但在 FTL 中却没有。所以我不确定 XML 在那个项目中是如何暴露给 FreeMarker 的。无论如何,我想orderSubline 是数据模型(顶级变量)的一部分,并且对应于顶部Order 元素。您可以将Order 元素作为参数传递给宏,而不是从宏内部的数据模型中获取Order 元素。比如&lt;#macro test orderSubline&gt;,然后是&lt;@test orderSubline /&gt;。因此,在宏内部,宏可以为嵌套的Order 调用自身,例如:

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

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      相关资源
      最近更新 更多