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条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格