如何根据限定符选择要绑定的特定子类型

时间:2015-01-28 06:02:15

标签: java xml jaxb

这是我拥有的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但它很难看

1 个答案:

答案 0 :(得分:1)

不要做

  

我的基本问题是,我在父元素中有一个字段   告诉我子类型在子字段(限定符)中是什么。什么&#39; S   正确的方法吗?

我不会这样做,因为它不符合在XML中表示继承的标准方式。这意味着你必须跳过箍来处理它,就像需要与这个XML交互的其他人一样。


取而代之的是

删除qualifier元素,并保持其他所有内容相同。这使得子类型成为限定符的元素名称。这对应于替换组的XML Schema概念,是表示继承的标准方法。它还使您的XML更短,这是一件好事。

Java模型

<强>内在

您将在@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 {
}