java中如何自定义xml文件中的xml格式
Posted
技术标签:
【中文标题】java中如何自定义xml文件中的xml格式【英文标题】:How to customize the xml format in an xml file in java 【发布时间】:2021-10-06 10:57:50 【问题描述】:我正在使用 Jaxb Marshaller 将 java 对象转换为 xml,并将 Marshaller.JAXB_FORMATTED_OUTPUT 设置为 true。这给了我以下格式的 xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml>
<time>20210716124226</time>
<details>
<employee id="100" time="20210716124212">
<name>asd</name>
<empid>1</empid>
<jobCategory>Contract</jobCategory>
</employee>
<employee id="102" time="20210716124212">
<name>ative</name>
<empid>2</empid>
<jobCategory>Permanent</jobCategory>
</employee>
</details>
</xml>
但要求是生成以下格式的xml,没有缩进:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml>
<time>20210716124226</time>
<details>
<employee id="100" time="20210716124212"><name>xyz</name><empid>1</empid><jobCategory>Contract</jobCategory></employee>
<employee id="102" time="20210716124212"><name>abc</name><empid>2</empid><jobCategory>Permanent</jobCategory></employee>
</details>
</xml>
如何使用 java 实现这个结果?
【问题讨论】:
您可以删除命令以格式化:marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
这将提供结果作为文本而不是带有适当缩进的 XML,以便我们更容易阅读。如果您想以您提供的精确缩进显示 XML,那么您必须编写自定义缩进。但我不认为有必要为什么你不想有缩进,这会让你更容易阅读,对吧?此外,它不会对您的 XML 内容进行任何更改。
问题是这个 xml 文件将被客户端应用程序用作输入数据源,并且该应用程序是旧应用程序,它接受输入 xml 文件格式作为我在上面在要求中提到的格式.由于合规性和监管条件,我无法访问客户端应用程序,因此我并不真正了解它的实现以及它在内部是如何工作的。而且他们还没有准备好接受标准/默认格式的 xml 文件,并要求我按照他们的期望对其进行自定义。
向我们展示您用于编写该 xml 的代码。看来您需要在 POJO 上添加一些注释。
【参考方案1】:
这非常令人恼火,我们不得不告诉使用 XML 的人正确解析它的次数,以及为没有正确解析它的人生成 XML 的问题的人数。但这就是生活——人们直到被困在将圆形插头插入方孔的任务中才意识到符合标准的价值。要做到这一点,就需要适配器——最好将适配器放在接口的不符合要求的一侧,在这种情况下是消费者。但是没有告诉别人。
在这种情况下,编写适配器并不困难。 Xalan 和 Saxon XML 序列化程序都可以选择使用 indent-spaces=0 进行缩进,这应该会提供您想要的格式,因此您只需使用此选项集对您的 XML 进行身份转换。
【讨论】:
以上是关于java中如何自定义xml文件中的xml格式的主要内容,如果未能解决你的问题,请参考以下文章