上午提了一个关于betwixt的问题“[url=http://www.iteye.com/problems/9145]使用betwixt根据Bean生成xml文件时如何指定xml模版文件的文件名?[/url]”
这个问题解决了之后,又想到一个更深一点的问题。
对于复杂结构的beans,是否能够仅使用一个完整的.betwixt模版文件,而不是多个呢?
或者,可以自由指定子结构的.betwixt模版文件吗?
例如,对于beans
[code="java"]
public class Person{
public String getName(){}
public void setName(String name){}
public Pocket getPocket(){}
public void setPocket(Pocket pock){}
}
public class Pocket{
public int getObjNum(){}
……
public String[] getObjects(){}
……
}
[/code]
为了获取如下的xml文件:
[code="xml"]
xiaoxiao
2
000001
000002
[/code]
我需要准备两个.betwixt模版文件:
Person.betwixt 和 Pocket.betwixt
现在,我已经可以在代码中指定Person的模版文件名。
但是还不能指定Pocket的模版文件名,只能使用默认路径及文件名。
这样还不够自由,不能满足我的需求
我希望:
1)要么,可以在代码或配置文件(或模版文件)中指定Pocket的模版文件,不使用默认路径及文件名。
2)要么,可以直接在Person.betwixt中对Pocket的Beans映射做描述,也就是说在一个模版文件中完成这两个Bean的映射描述。
是否可以实现呢?请各路高手支招哈,多谢~:)
[b]问题补充:[/b]
[quote]给个提示,试试xstream把。
rain2005 (中级程序员) 2008-12-25 [/quote]
xstream远没有betwixt灵活啊~不过我没有用过xstream,道听途说而已,呵呵~:)
我需要完成一些比较复杂的映射,应该还是用betwixt好些吧?
[b]问题补充:[/b]
----------传说中的分割线,哈哈------------------------
[quote]到官网上看看教程就知道了,不会失望得
rain2005 (中级程序员) 2008-12-25 [/quote]
非常感谢你的热心帮助~:)
我看了一下那个xstream的官网教程.有一点我们比较关心的没有看到.
我们比较看重betwixt提供的配置能力,也就是那个.betwixt模板文件.如果期望生成的XML文件格式发生变化,我们可以很容易地通过修改这个模板文件来实现,而不是修改代码.
我没有看到xstream提供这种能力,或许是我还没有看到.如果它提供了这种能力,请再提醒我一下.谢谢~:)
[b]问题补充:[/b]
问题解决,开心哈~:)
使用如下的模版文件
[code="xml"]
<?xml version="1.0"?>
<class name="com.translate.demo.Person">
<!-- standard definitions (same as in standard .betwixt file) -->
<element name="person">
<element name="name" property="name"/>
<element name="ych-pocket">
<element name="pocket" property="pocket"/>
</element>
</element>
</class>
<class name="com.translate.demo.Pocket">
<element name="pocket">
<element name="number" property="objNum"/>
<element name="objects">
<element name="object" property="objectName"/>
</element>
</element>
</class>
[/code]
再增加如下代码:
[code="java"]
//读取配置文件并加载
InputSource ins = new InputSource(new FileReader("D:\workspace\translate_demo\cfg\Person.betwixt"));
beanWriter.getXMLIntrospector().register(ins);
beanWriter.write(person);
[/code]
如此便可实现一个模版文件打天下啦~:)