JAXB unmarshalling - 多次出现的元素由其他元素分隔

时间:2016-01-25 04:12:43

标签: java xml jaxb

我正在尝试使用JAXB解组一个XML文件,该文件的元素出现5次,但不是连续出现;我想做一些更改,然后将其编组回XML。当写回XML文件时,元素的实例需要以相同的顺序返回,并由与之前相同的插入元素分隔

我知道我可以用Collection来表示多次出现的元素,我可以使用@XmlType(propOrder = {...})指定字段的顺序,但我无法理解两者同时......

我尝试在我的Java类中使用5个不同的字段名称(encryptedData1,encryptedData2,...),以及5对不同的getter / setter,然后使用相同的名称注释setter:

@XmlElement( name = "EncryptedData" )

但是当我解组时,只有第一个被设置,其他的都是空的。确实填充的字段具有XML文件中最后一个实例的值,所以我猜测它只是设置了五次

如果我使用List,那么当我写出XML文件时,它们都会被写在一起

以下是原始XML的示例; EncryptedData元素是有问题的元素:

<NodeInformation>
...
  <ProxyIpPort>1194</ProxyIpPort>
  <LicenseKeyID />
  <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
    <CipherData>
      <CipherValue>************************</CipherValue>
    </CipherData>
  </EncryptedData>
  <ProxyUsername />
  <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
    <CipherData>
      <CipherValue>***********************</CipherValue>
    </CipherData>
  </EncryptedData>
  <ActualIpAddress />
  <HasMASServer>false</HasMASServer>
  <MASServerIpAddress />
  <MASServerWebListeningPort>443</MASServerWebListeningPort>
  <ModemNumber />
  <RememberLoginPassword>true</RememberLoginPassword>
  <LoginName>admin</LoginName>
  <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
    <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
    <CipherData>
      <CipherValue>***************************</CipherValue>
    </CipherData>
  </EncryptedData>
  ...
</NodeInformation>

提前感谢您的任何见解

1 个答案:

答案 0 :(得分:0)

您是否只想更改元素!= EncryptedData,即将未更改的EncryptedData元素保持在相对位置?

如果是这种情况,可以使用JAXB Binder, 见JAXB & XML Infoset Preservation