我正在尝试使用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>
提前感谢您的任何见解
答案 0 :(得分:0)
您是否只想更改元素!= EncryptedData,即将未更改的EncryptedData元素保持在相对位置?
如果是这种情况,可以使用JAXB Binder, 见JAXB & XML Infoset Preservation