当前位置: 首页 > 面试题库 >

与JAXB编组时如何添加DOCTYPE和xml处理指令?

米景辉
2023-03-14
问题内容

我正在编组(序列化)JAXB bean以输出流。如何向输出添加DOCTYPE声明和xml处理指令?

我目前正在这样编组:

JAXBContext jaxbContext = JAXBContext.newInstance("com.example.package");
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema schema = schemaFactory.newSchema(schemaSource);
marshaller.setSchema(schema);

marshaller.marshal(object, output);

我想要的输出看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Something SYSTEM "some.dtd">
<?xml-stylesheet type="text/xsl" href="some.xsl"?>

JAXB bean是生成的代码,因此我不想更改它们。

有一些技巧和未记录的技巧(请参阅使JAXB生成XML处理指令)来添加xml处理指令和doctype。但是,执行此操作的首选或正确方法是什么?


问题答案:

JAXB RI具有专有Marshaller属性com.sun.xml.bind.xmlHeaders(请参阅XML Preamble
Control

此属性使您可以指定XML前置符(<?xml ...> 声明)以及其后的所有其他PI,注释,DOCTYPE声明。此属性只有当你编组到效果
OutputStreamWriterStreamResult。请注意,此属性与该属性交互
Marshaller.JAXB_FRAGMENT。如果未更改该属性或将其设置为false,则JAXB将始终编写其XML前导,因此该属性只能用于编写PI,注释
DOCTYPE等。另一方面,如果将其设置为true,则JAXB将不会编写自己的XML前导,因此此属性可能包含自定义XML前导。

这应该做您需要的。如果您正在使用Java5和JAXB
RI,则应该可以使用。如果您使用Java6及其附带的JAXB实现,则com.sun.xml.bind.xmlHeaders名称可能会有所不同,请com.sun.xml.internal.bind.xmlHeaders改用。



 类似资料:
  • 问题内容: 我正在使用JAXB动态生成XML。 现在,我想使用XSL将其转换为HTML。我该如何包括 在动态生成的XML中? 问题答案: 这里的所有解决方案都非常丑陋和冗长。只需在Mashaller对象内部设置一行即可指定其他标题。 本示例将使用样式表将对象输出到文件,并很好地格式化元素以供人类阅读。该对象属于类,并将被写入file,并由给出的样式表设置格式: 更新资料 在最新版本的JAXB中,我

  • 我有以下问题,当我生成XML文件时,Jaxb给根元素的名称空间添加前缀,我不知道如何跳过它。 我有软件包信息.java文件 我有根元素 结果我得到了 如果没有@XmlNs,它的工作方式也是一样的,将命名空间添加到@XmlRoolElement也没有帮助。它会有什么问题?

  • 问题内容: 我正在尝试与JAXB进行封送处理。 我的输出就像 但是我需要像这样的输出 我正在使用以下代码来执行此操作。如果我取消注释代码,则会出现属性绑定异常。没有它,我可以编译,但无法获得所需的确切输出。 和我的豆lo 转接器类别 问题答案: 您可以执行以下操作: 适配器CDATA 根 该注释用于指定的应该被使用。 演示版 我必须包装一个以获得所需的效果。另请注意,设置方法意味着它负责该操作的所

  • Section Contents 前言 揭示XML文档 结点树 将XML放到数据模型中 必要的XML处理 基本内容 具体细节 声明的XML处理 基本内容 具体细节

  • 任务2在内存中可能有以下计数:Jill:10 Joe:4 如果我向集群中添加了一台新机器以增加容量并运行rebalance,内存中的计数会发生什么情况?你会开始得到不同计数的用户吗?

  • 嗨,我正在解组一个XML文件,该文件有一个标记,可以包含值或元素列表。我想知道解组这种XML的最佳方法是什么。例子: 我无法改变XML的构建方式,因此我希望有人能给出答案。非常感谢。