2013-05-10 98 views
1

是否可能在smooks(版本1.5.1)中只映射一个从两个选择元素生成的元素到java字段?Smooks - 如何将选择元素从xml映射到java

实施例:

XSD文件:

<complexType name="timeType"> 
    <sequence> 
    <choice minOccurs="1" maxOccurs="1"> 
    <element name="time" minOccurs="0" maxOccurs="1"> 
     <complexType> 
     <attribute name="v" type="dateTime"/> 
     </complexType> 
    </element> 
    <element name="time2" minOccurs="0" maxOccurs="1"> 
     <complexType> 
     <attribute name="v" type="dateTime"/> 
     </complexType> 
    </element> 
    </choice> 
</complexType> 

一个)的xml文件1:

<parent> 
    <time v="2001-12-31T12:00:00"/> 
</parent> 

b)中的XML文件2:

<parent> 
    <time2 v="2002-12-31T12:00:00"/> 
</parent> 

的Smooks映射

<jb:bean beanId="timeRef" class="someClass" createOnElement="parent"> 
    <!-- only if is generated (present) time element map this time element--> 
    <jb:value property="fromHour" data="time/@v" decoder="DateTime" /> 

    <!-- only if is generated (present) time2 element map time2 element --> 
    <jb:value property="fromHour" data="time2/@v" decoder="DateTime" /> 
</jb:bean> 

我该如何告诉smooks,我想只保存一个生成的元素?由于

回答

1

我的解决办法:

<jb:bean beanId="parentBeanId" class="parentMapClass" createOnElement="parentElement"> 
     ... 
     <jb:wiring property="property" beanIdRef="timeRef" /> 
     <jb:wiring property="property" beanIdRef="timeIntervalRef" /> 
     ... 
</jb:bean> 

<jb:bean beanId="timeRef" class="someClass" createOnElement="parentElement/time"> 
     <jb:value property="fromHour" data="time/@v" decoder="DateTime" /> 
     <jb:value property="toHour" data="time/@v" decoder="DateTime" /> 
</jb:bean> 

    <jb:bean beanId="timeIntervalRef" class="someClass" createOnElement="parentElement/timeInterval"> 
     <jb:value property="fromHour" data="timeInterval/@v" decoder="TimeIntervalFrom" /> 
     <jb:value property="toHour" data="timeInterval/@v" decoder="TimeIntervalTo" /> 
    </jb:bean>