Java JAXB unmarshalling—多次出现并被其他元素分隔的元素

Java JAXB unmarshalling—多次出现并被其他元素分隔的元素,java,xml,jaxb,Java,Xml,Jaxb,我试图使用JAXB来解组一个XML文件,该文件的元素出现了5次,但不是一行;我想做一些更改,然后将其封送回XML。当写回XML文件时,元素的实例需要以相同的顺序返回,并由与前面相同的中间元素分隔 我知道我可以表示一个集合中多次出现的元素,我可以使用@XmlType(propOrder={…})指定字段的顺序,但我不知道如何同时执行这两个操作 我尝试在Java类中使用5个不同的字段名(encryptedData1、encryptedData2,…)和5对不同的getter/setter,然后用相同

我试图使用JAXB来解组一个XML文件,该文件的元素出现了5次,但不是一行;我想做一些更改,然后将其封送回XML。当写回XML文件时,元素的实例需要以相同的顺序返回,并由与前面相同的中间元素分隔

我知道我可以表示一个集合中多次出现的元素,我可以使用@XmlType(propOrder={…})指定字段的顺序,但我不知道如何同时执行这两个操作

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

@XmlElement( name = "EncryptedData" )
但是当我解组时,只有第一个被设置,其他的都是空的。填充的字段具有XML文件中最后一个实例的值,因此我猜它只设置了五次

如果我使用一个列表,那么当我向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>

...
1194
************************
***********************
假的
443
真的
管理
***************************
...

提前感谢您提供的任何见解

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

如果是这样的话,可能可以使用JAXB绑定器,
请参见

XML的结构无法在XML模式中表达(EncryptedData元素在多个位置多次出现)。因此,不可能使用JAXB注释来表达这一点。您可以尝试使用XSLT并进行替换,或者以编程方式构建文档,例如使用DOMFantastic!在我按照链接文章中的建议从默认JAXB实现切换到MOXy之后,这就起到了作用,唯一的一点是,出于某种原因,它去掉了xmlns属性的值,但之后我将只添加它。谢谢你的帮助!