使用Smooks(1.4
)讀取CSV並將它們轉換爲Person
POJO。使用Smooks讀取CSV
的CSV由每行逗號分隔的記錄,每條記錄都有豎線分隔的字段:
史密斯|約翰| 45 |男|約翰尼| JSMITH | JSmizzle,
史密斯|簡| 43 |女| Janey
等。因此,每一行代表一個不同的人來創建。首先,一個POJO:
public class Person
{
private String lastName;
private String firstName;
private int age;
private boolean isMale;
private List<String> aliases;
}
我的問題是別名的List
。下面是我的XML配置的重要部分:
<reader class="org.milyn.csv.CSVReader">
<param name="fields">lastName,fristName,age,gender,aliases</param>
<param name="separator">|</param>
<param name="strict">false</param>
</reader>
<core:filterSettings type="SAX"/>
<jb:bean beanId="person" class="net.me.myproject.app.Person" createOnElement="csv-set/csv-record/">
<jb:value property="lastName" data="csv-set/csv-record/lastName"/>
<jb:value property="firstName" data="csv-set/csv-record/firstName"/>
<jb:value property="isMale" data="csv-set/csv-record/gender"/>
<jb:value property="age" data="csv-set/csv-record/age"/>
<jb:wiring property="aliases" beanRefId="aliases"/>
</jb:bean>
<jb:bean beanId="aliases" class="java.util.ArrayList" createOnElement="???">
<jb:wiring beanRefId="alias"/>
</jb:bean>
<jb:bean beanId="alias" class="java.util.String" createOnElement="???">
???
</jb:bean>
那麼,我窒息是獲得正確的aliases
的ArrayList以及每個alias
字符串配置createOnElement
。預先感謝任何能夠讓我朝正確方向發展的人!
你有過任何控制傳入文件格式?當將媒體資產元數據從XML平面化到管道分隔的文本時,類似「流派」或「演員」的字段有時不得不包含列表,我們遇到了類似的問題。我們用另一個分隔符結束了用這樣的列表分隔元素。科隆在我們的案件中工作得很好 – Olaf 2012-01-30 19:36:12
我喜歡奧拉夫的方法比接受的答案更多。 – Alfabravo 2012-01-31 20:05:48