java - 多个 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 对象,但这不起作用。有人可以指导我正确的方向,以便我可以阅读更多内容。
谢谢
解决方案
我建议对传入的文档进行 XSLT 转换,以在 JAXB 处理之前将它们转换为通用形式。
XSLT 在处理可变 XML 文档结构方面比 JAXB 灵活得多。
推荐阅读
- ruby-on-rails - 安装 Rails 引擎时未加载控制器
- flutter - Flutter 如何将 Provider 的价值取出来
- python - Python:处理字符串
- c++ - 如何在 Mac 上安装替代版本的 Boost C++ 库
- django - Django复制block.super内容
- reactjs - 使用 React/Relay/Typescript 跨片段重用组件的最佳实践是什么?
- android - 发布变体中的 Android MotionLayout 过渡
- wsh - Wscript 和 Tor 浏览器
- python - 具有不同不透明度的演员中的VTK不同对象
- javascript - 如何在javascript中计算两个浮点数的确切总和