这是我拥有的XML(ish)
<?xml version="1.0" encoding="UTF-8"?>
<edi837>
<ISA >
<ISA01>00</ISA01>
<ISA02> </ISA02>
<GS>
<GS01>HC</GS01>
<GS07>X</GS07>
<GS08>005010X223A2</GS08>
<ST>
<ST01>837</ST01>
<ST02>0001</ST02>
<ST03>005010X223A2</ST03>
<BHT>
<BHT01>19</BHT01>
<BHT02>0</BHT02>
<BHT03>524</BHT03>
<BHT04>20111207</BHT04>
<BHT05>1323</BHT05>
<BHT06>CH</BHT06>
</BHT>
<Loop1000/>
<Loop1000/>
<Loop2000/>
<Loop2000/>
</ST>
</GS>
</ISA>
</edi837>
&lt; - 但是,我有: - &gt;
<?xml version="1.0" encoding="UTF-8"?>
<edi835>
<ISA>
<ISA01>00</ISA01>
<ISA02>Authorizat</ISA02>
<ISA16/>
<GS>
<GS06>1</GS06>
<GS07>X</GS07>
<GS08>005010X221A1</GS08>
<ST>
<ST01>835</ST01>
<ST02>0001</ST02>
<BPR/>
<TRN/>
<DTM/>
<Loop1000A/>
<Loop1000B/>
<Loop2000/>
<PLB/>
</ST>
<ST>
<ST01>835</ST01>
<ST02>0001</ST02>
<BPR/>
<TRN/>
<DTM/>
<Loop1000A/>
<Loop1000B/>
<Loop2000/>
<PLB/>
</ST>
</GS>
</ISA>
</edi835>
我的基本问题是,我在父元素中有一个字段,告诉我子字段在子字段中是什么
&LT; GS08&GT; 005010X223A2&LT; / GS08&GT;
这样做的正确方法是什么?
我基本上想要一个XmlTypeAdapter,可以将我从1个绑定类型带到另一个绑定类型。喜欢:“给我第一个元素,我会告诉你如何处理其余的元素” 对象工厂可能能够做到这一点。希望这很清楚
每个&lt; ST&gt;结构可以如此根本不同,实际上,我想要做的只是指定直到&lt; ST&gt;然后让它从那里反映其余的类型。
我已经用ACTUAL XML(浓缩)完全取代了原始的,人为的XML。我解决了它here但它很难看
答案 0 :(得分:1)
我的基本问题是,我在父元素中有一个字段 告诉我子类型在子字段(限定符)中是什么。什么&#39; S 正确的方法吗?
我不会这样做,因为它不符合在XML中表示继承的标准方式。这意味着你必须跳过箍来处理它,就像需要与这个XML交互的其他人一样。
删除qualifier
元素,并保持其他所有内容相同。这使得子类型成为限定符的元素名称。这对应于替换组的XML Schema概念,是表示继承的标准方法。它还使您的XML更短,这是一件好事。
<强>内在强>
您将在@XmlElementRef
课程的problemType
字段/属性上使用Inner
注释。要解组的类型将基于遇到的元素,以及哪个子类型具有匹配的@XmlRootElement
注释。
@XmlAccessorType(XmlAccessType.FIELD)
public class Inner {
@XmlElementRef
private ProblemType problemType;
}
<强> ProblemType1 强>
@XmlRootElement(name="ProblemType1")
public class ProblemType1 extends ProblemType {
}
<强> ProblemType2 强>
@XmlRootElement(name="ProblemType2")
public class ProblemType2 extends ProblemType {
}