首页 > 解决方案 > 多个 XML 文档到一个 java 对象或 XML 文件到一个 java 对象

问题描述

我有许多不同的 xml 文档,它们基本上没有相同的结构,我需要解析它们或将它们编组为 java 对象。这些 xml 文档来自不同的 api。

java对象如下xml文件在java对象下面

@XmlRootElement(name = "ABF")
public class QuoteOffer   { 

    @XmlElement(name = "QUOTEID")
    private String quoteId;

    @XmlElement(name = "CHARGE")
    private Float charge; 

    @XmlElement(name = "SHIPDATE")
    private Date shipDate;

    @XmlElement(name = "EFFECTIVEDATE")
    private Date effectiveDate;

    @XmlElement(name = "EXPIRATIONDATE")
    private Date expirationDate; 

    @XmlElement(name = "ORIGTERMINFO")
    private List<OrigTermInfo> origTermInfo;

    @XmlElement(name = "DESTTERMINFO")
    private List<DestTermInfo> destTermInfo;

xml文档如下

<?xml version="1.0"?>
<ABF>
<QUOTEID>LS1N9F2601</QUOTEID>
<CHARGE>166.08</CHARGE>
<DISCOUNTPERCENTAGE></DISCOUNTPERCENTAGE>
<ADVERTISEDTRANSIT>1 Day</ADVERTISEDTRANSIT>
<ADVERTISEDDUEDATE>2021-05-06</ADVERTISEDDUEDATE>
<SHIPDATE>2021-05-05</SHIPDATE>
<EFFECTIVEDATE>2021-05-05</EFFECTIVEDATE>
<EXPIRATIONDATE>2021-05-11</EXPIRATIONDATE>
<CODFEE></CODFEE>
<TPDELIVERYCHARGE></TPDELIVERYCHARGE>
<TPCHARGEPERBOX></TPCHARGEPERBOX>
<ORIGTERMINFO>
<ORIGTERMADDRESS>4242 IRVING BLVD</ORIGTERMADDRESS>
<ORIGTERMCITY>DALLAS</ORIGTERMCITY>
<ORIGTERMSTATE>TX</ORIGTERMSTATE>
<ORIGTERMZIP>75247</ORIGTERMZIP>
<ORIGTERMPHONE>2146880448</ORIGTERMPHONE>
<TYPE>DIRECT</TYPE>
</ORIGTERMINFO>
<DESTTERMINFO>
<DESTTERMADDRESS>4410 S. JACKSON</DESTTERMADDRESS>
<DESTTERMCITY>TULSA</DESTTERMCITY>
<DESTTERMSTATE>OK</DESTTERMSTATE>
<DESTTERMZIP>74107</DESTTERMZIP>
<DESTTERMPHONE>9184460122</DESTTERMPHONE>
<TYPE>DIRECT</TYPE>
 
 
 

xml 和 java 对象的代码被截断以便于阅读。java 对象将被修复。如果某些字段为空,那就这样吧。我面临的问题是 xml 文档将有不同的 @XmlRootElements

1-(拥有 20 个不同的 java 对象来满足 20 个不同的 xml 文档是没有意义的,因为每个 java 对象我只能有一个 @XmlRootElement(name = "ABF") 这会导致问题)

2- @XmlElement 只能与相应的 XML 文档相同,因此在一个 java 字段上具有不同的 @XmlElement 也没有意义。

我的问题是有谁知道使用什么技术将多个 xml 文档值编组到 java 对象列表。

我在 java 循环中遇到了 xml 解析和子节点。显然我尝试使用 jaxb 编组到 java 对象,但这不起作用。有人可以指导我正确的方向,以便我可以阅读更多内容。

谢谢

标签: javaxmljaxb

解决方案


我建议对传入的文档进行 XSLT 转换,以在 JAXB 处理之前将它们转换为通用形式。

XSLT 在处理可变 XML 文档结构方面比 JAXB 灵活得多。


推荐阅读