yinch516 2008-12-25 15:36
浏览 235
已采纳

是否可以使用一个.betwixt模版文件搞定复杂结构的bean?

上午提了一个关于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]

如此便可实现一个模版文件打天下啦~:)

  • 写回答

3条回答 默认 最新

  • iteye_5200 2008-12-26 08:59
    关注

    哦,这个没有实现,[quote]如果期望生成的XML文件格式发生变化,我们可以很容易地通过修改这个模板文件来实现[/quote],我觉得没有多大必要,毕竟XML文件格式改动都需要程序员来完成修改,修改代码和修改配置文件没有什么区别把,关键是那个更简单来决定使用那种方式。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制