2011-01-21 42 views
0

我想將xml從一種格式轉換爲另一種使用smooks。源XML看起來像什麼如下所示:Smooks XML-XML轉換與多個插入點

<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> 

我想變換分析上面的東西是這樣的:

<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>   

對於這一點,我用下面的Smooks配置:

<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> 

除了參考號碼,我能夠改變其他的一切。有關如何完成此任何建議將不勝感激。

回答

0

您可以使用Smooks javabean功能將該值綁定到Java對象(只需放入HashMap中),然後從Freemarker模板訪問該bean?

0
<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

如果您想標記多行代碼,您可以使用空格或單擊{}按鈕,而不是使用`for each line – n00begon 2013-01-21 21:31:36