【问题标题】:How to stop Marshaller class adding XML tag in my output file如何停止 Marshaller 类在我的输出文件中添加 XML 标记
【发布时间】:2014-08-21 14:26:39
【问题描述】:

我正在分 2 个单独的步骤编组我的对象。一个添加标题,另一个添加正文。现在当我使用这段代码时

marshaller.marshal(payload, writer); 
//payload is Objects name and writer is StringWriter class object

XML 标记 <?xml version="1.0" encoding="utf-8"?> 在最终输出文件中添加了两次。

我在编组正文部分时如何不第二次添加[<?xml version="1.0" encoding="utf-8"?>] XML 标记??

我已经使用了 Marshaller 接口的所有属性,但这并没有帮助。

【问题讨论】:

    标签: java xml jaxb marshalling


    【解决方案1】:

    这个问题的解决方案比我自己写代码要简单得多。

    您需要在 Marshaller 上将 JAXB_FRAGMENT 属性指定为 true 以避免此问题。此属性让 JAXB 知道它正在编组到文档的中间,并且它不应该写入标题。

    所以我保留了下面的代码,就在编写 BODY 部分之前:

    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
    

    它就像一个魅力!

    【讨论】:

      【解决方案2】:

      您需要执行以下操作:

      1. 手动编写根元素(不使用 JAXB)
      2. 封送 Header 对象。根元素应该是标题的本地根元素。
      3. 封送 Body 对象。根元素应该是正文的本地根元素。
      4. 手动关闭根元素(不使用 JAXB)

      如果可能,请使用 StAX XMLStreamWriter 进行手动编写和编组。我的博客上有一个相关的例子:

      注意:

      当您编组到 XML 文档中时,您必须在 Marshaller 上指定以下属性。

      marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
      

      【讨论】:

      • 感谢您分享您的帖子。
      猜你喜欢
      • 2020-04-04
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多