当前位置: 首页 > 知识库问答 >
问题:

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

廖琪
2023-03-14

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

我知道我可以用集合来表示一个多次出现的元素,并且我可以使用@XMLType(比例={...})指定字段的顺序,但我不知道要同时做到这两个...

我尝试在我的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>

共有1个答案

顾正初
2023-03-14

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

如果是这种情况,则可能使用JAXB绑定器,请参阅JAXB&XML信息集保存

 类似资料:
  • 问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案。 为了演示,先假设你有一个单词列表并且想找出哪个单词出现频率最高。你可以这样做: words = [ 'look', 'into', 'my', 'eyes', 'look', 'into',

  • 问题内容: 我正在使用Selenium将Web测试添加到我的项目中。我已经有很多使用以下方法检查特定元素的测试: 这很好。现在,我还有另一个要求。这是在我生成的页面中: 如何掌握错误消息?我想要一些允许我在dateElement之后请求带有“错误”类的span元素的东西。 (此错误消息是由Spring MVC合并的,因此直接更改它并不容易。我想可能是这样,但我不希望这样做)。 任何其他想法都欢迎。

  • 我是使用火花和蟒蛇的新手 我有以下元组 我要做的是,从每个元素中减去,例如(4.32,32.32,23.3),每个帐户对应的平均值,到4.32-3.23,到32.32-32.32。。。 我的想法是做到以下几点。 但是我不知道如何才能正确地输入索引。 我的输入文件具有以下结构。 然后我计算每行的平均值,因此例如对于所有名为Serge的Keys,我有以下数据元组。 现在我想要的是减去每个元素的平均值.

  • 问题内容: 我正在寻找一种确定JavaScript数组中哪个元素的出现次数最多的优雅方法(mode)。 例如,在 该元素是最常见的元素。 问题答案: 这只是模式。这是一个 快速的,未优化的 解决方案。它应该是O(n)。

  • 问题内容: 我有以下HTML结构: 我只想选择之前的内容。我怎样才能做到这一点?在我的内容中,越来越多的东西,因此解决方案应该是通用的。 问题答案: 据我所知,CSS没有提供将 在* 选择器 之前定位的任何选择器。您能否将其选择为()之后的? * 如您所见,这可能是您依赖CSS时可以使用的最佳选择器,尽管您可以轻松地向之前的每个类添加一个类。这样可以避免您在另一个段落和段落节之前有一个段落节的情况

  • 我需要正确地(没有硬代码)定位h1元素使用网格,css或Flex。所有这些元素都存储在大小相等的列中。在一行中。当屏幕变小时,我需要将element1和element2放在h1测试的下面。任务的细节不允许在css中为各种屏幕扩展使用@media。因此,我在这里写作,因为我不明白如何做到这一点。 我需要元素的这个位置