gpt4 book ai didi

java - 为每个元素生成带有命名空间的 XML

转载 作者:行者123 更新时间:2023-11-30 06:32:11 31 4
gpt4 key购买 nike

如何使用 JAXB 生成具有以下模式的 XML。

<NS1:getRatesResponse xmlns:NS1="http://mynamespaceTypes">
<response>
<NS2:rates xmlns:NS2="http://mynamespace">
<currency>USD</currency>

</NS2:rates>
<NS3:rates xmlns:NS3="http://mynamespace">
<currency>EUR</currency>

</NS3:rates>
<NS4:rates xmlns:NS4="http://mynamespace">
... etc
</response>
</NS1:getRatesResponse>

我不知道如何告诉 JAXB 每个新项目都应该是具有相同命名空间的 NS(n+1)。更改 XML 格式不是一种选择,因为它是外部的。

JAXB 正确地解析了这个 XML,但是当使用相同的类生成时,它会像这样生成它:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:getRatesResponse
xmlns:ns2="http://mynamespaceTypes"
xmlns:ns3="http://mynamespace">
<response>
<ns2:rates>
<currency>EUR</currency>

</ns2:rates>
<ns2:rates>
<currency>USD</currency>

</ns2:rates>
</response>
</ns3:getRatesResponse>

最佳答案

对于这个用例,我将执行以下操作:

  1. 创建 StAX XMLStreamWriter
  2. getRatesResponseresponse 元素直接写入 XMLStreamWriter
  3. marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 上设置以下属性,以防止在每次编码调用时写入 header 。
  4. 分别将每个 Rate 对象编码到 XMLStreamWriter
  5. 在 Marshaller 上设置一个 NamespacePrefixMapper 实例来控制命名空间前缀(这目前需要 JAXB RI,目前正在将对此扩展的支持添加到 EclipseLink JAXB (MOXy) 中)。

了解更多信息

关于java - 为每个元素生成带有命名空间的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034515/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com