开发者

Smooks XML-XML transformation with multiple insertion points

I am trying to transform an xml from one f开发者_运维知识库ormat to another using smooks. The source xml looks like what is shown below:

<page>
    <responsedata>
      <header>
          ...
          <ref_no>xyz</ref_no>
      </header>
      <detail>
          <acc_no>x</acc_no>
          <ac_ccy>y</ac_ccy>
          <avail_bal>z</avail_bal>
      </detail>
      <detail>
          ...
      </detail>
    </responsedata>
</page>

I am trying to tranform the above to something like this:

<detail>
    <ref_no>xyz</ref_no>
    <accounts>
         <account>
            <Account_no>x</Account_no>
            <Curr>y</Curr>
            <Avail_Bal>z</Avail_Bal>
         </account>
         <account>
            ...
         </account>
    </accounts>
</detail>        

For this, I used the following smooks configuration:

<ftl:freemarker applyOnElement="responsedata">
    <ftl:template><!--<?xml version="1.0" encoding="UTF-8" ?>
    <DETAIL>
      <Ref_No>????<Ref_No> //how to bring the ref_no here
      <Accounts>
        <?TEMPLATE-SPLIT-PI?>
      </Accounts> 
    </DETAIL>
    --></ftl:template>
</ftl:freemarker>


 <ftl:freemarker applyOnElement="detail">
    <ftl:template><!--
    <Account>
       <Account_no>${detail.acc_no}</Account_no>
       <Curr>${detail.ac_ccy}</Curr>
       <Avail_Bal>${detail.avail_bal}</Avail_Bal>
    </Account>
     --></ftl:template>
 </ftl:freemarker>

Except for the reference number, I am able to transform everything else. Any suggestions on how to accomplish this would be highly appreciated.


Could you use the Smooks javabean capability to bind that value to a Java object (just put in a HashMap) and then access that bean from the Freemarker template?


<resource-config selector="header">
   <resource>org.milyn.javabean.BeanPopulator</resource>
   <param name="beanId">header</param>  
   <param name="beanClass">java.util.HashMap</param>
   <param name="bindings">
      <binding property="refNo" selector="header/ref_no" />
   </param>
</resource-config>

<resource-config selector="header">
   <resource type="ftl">
       <![CDATA[<detail>
       <ref-no>${header.refNo}</ref-no>
        ...
       </detail>]]>  
       </resource> 
</resource-config>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜