【问题标题】:Smooks XML-XML transformation with multiple insertion points具有多个插入点的 Smooks XML-XML 转换
【发布时间】:2011-01-21 07:04:31
【问题描述】:

我正在尝试使用 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>

除了参考编号,我可以转换其他所有内容。任何有关如何实现此目的的建议将不胜感激。

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    您能否使用 Smooks javabean 功能将该值绑定到 Java 对象(只需放入 HashMap),然后从 Freemarker 模板访问该 bean?

    【讨论】:

      【解决方案2】:
      <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>
      

      【讨论】:

      • 如果要标记多行代码,可以使用空格或单击 {} 按钮,而不是每行都使用 `
      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      相关资源
      最近更新 更多