【问题标题】:Schema Conversion in JAXBJAXB 中的模式转换
【发布时间】:2018-04-02 09:35:50
【问题描述】:

假设,我有一个示例类foo,其属性为bar。我已经为 JAXB 设置了注解,所以我可以将其导出为 XML 并重新导入。

@XmlRootElement
public class foo {
    private int bar;

    @XmlElement()
    public int getBar() {
        return bar;
    }

    public void setBar(int bar) {
        this.bar = bar;
    }
}

XML 文件应如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
    <bar>5</bar>
</foo>

现在我学会了,我也可以将bar设为一个属性。改用@XmlAttribute 会使它看起来像&lt;foo bar="5"/&gt;,我更喜欢哪个?

我已经有很多使用旧架构的文件。手动更改它们会非常麻烦,所以我想自动进行。

JAXB 是否提供转换文件的便捷方式?也许解组和编组的不同注释?如果不付出太多努力,我还能做些什么来实现这一目标?

【问题讨论】:

  • 你的意思是你有一堆带有&lt;bar&gt;5&lt;/bar&gt;的xml文件?
  • @pirho 是的,我想将它们转换为 ,所以我可以将它们与 XmlAttribute 注释一起使用
  • 如果不是你每天都做的事情,也许只是一些简单的文件替换正则表达式的东西会更合适?但是你想用 java jaxb 的方式来做吗?
  • @pirho 它已经完成了一次,而且不需要太多的努力。我不坚持使用 JAXB,但我认为这可能是最简单的方法。

标签: java xml jaxb converter


【解决方案1】:

不是 JAXB 专家,可能有更优雅的解决方案。但无论如何,这里有一个 - 也许不是那么优雅 - 解决方案。

class foo 中你无论如何都会改变

@XmlElement()
public int getBar() {

@XmlAttribute()    
public int getBar() {

然后您可以继承 foo 来解组旧文件

@XmlRootElement
public class foo2 extends foo {

    @Override
    @XmlElement()    
    public int getBar() {
        return super.getBar();
    }

    @Override
    public void setBar(int bar) {
        super.setBar(bar);
    }
}

那么有可能将foo2 编组为超级foo

JAXBContext context = JAXBContext.newInstance(foo.class);

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 2021-10-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多