【问题标题】:Best way to map from XML to unmatching POJO从 XML 映射到不匹配的 POJO 的最佳方式
【发布时间】:2015-12-11 02:12:27
【问题描述】:

处理将一个 XML (xmlA) 映射到 jaxb 生成的 pojo 映射到不同的 XML 合同 (xmlB) 的“正确”方式是什么

例如,使用以下输入:

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
   </book>
</catalog>

我想映射到下面的类

public class PART
{
    private String ITEM;

    private String MANUFACTURER;


    @Override
    public String toString()
    {
        return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]";
    }
}

作者映射到ITEM,标题映射到MANUFACTURER。

目前我正在使用 xml 转换,然后进行映射;这是最好/正确的方法吗?或者此类问题的行业标准是什么。

谢谢

【问题讨论】:

标签: java xml jaxb transform pojo


【解决方案1】:

注意:类名应该是大小写混合的(Part),字段名应该是小写,或者更确切地说是驼峰式(itemmanufacturer)。


您可以在@XmlElement 注解上指定元素名称。

public class Test {
    public static void main(String[] args) throws Exception {
        String xml = "<?xml version=\"1.0\"?>\n" +
                     "<catalog>\n" +
                     "   <book id=\"bk101\">\n" +
                     "      <author>Gambardella, Matthew</author>\n" +
                     "      <title>XML Developer's Guide</title>\n" +
                     "   </book>\n" +
                     "</catalog>";
        JAXBContext jc = JAXBContext.newInstance(Catalog.class, PART.class);
        Unmarshaller u = jc.createUnmarshaller();
        Catalog catalog = (Catalog)u.unmarshal(new StringReader(xml));
        for (PART part : catalog.parts)
            System.out.println(part.toString());
    }
}

@XmlRootElement(name="catalog")
class Catalog {
    @XmlElement(name="book")
    List<PART> parts;
}

class PART
{
    @XmlElement(name="author")
    private String ITEM;

    @XmlElement(name="title")
    private String MANUFACTURER;

    @Override
    public String toString()
    {
        return "ClassPojo [ITEM = "+ITEM+", MANUFACTURER = "+MANUFACTURER+"]";
    }
}

输出

ClassPojo [ITEM = Gambardella, Matthew, MANUFACTURER = XML Developer's Guide]

【讨论】:

  • 我无法修改 PART 的类文件,它们已经有不同的元素名称
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 2012-08-06
  • 2023-03-05
相关资源
最近更新 更多