gpt4 book ai didi

java - 是否可以在不使用CharacterEscapeHandler的情况下使用CDATA在JAXB中进行编码和解码

转载 作者:行者123 更新时间:2023-12-01 14:33:26 26 4
gpt4 key购买 nike

我不想使用CharacterEscapeHandler。不知何故,希望 java 字符串(将成为 XML 属性)中的换行符 (\n) 在使用 JAXB 进行编码和解码之后需要存在。尝试将 Marshaller 中的编码属性更改为 Unicode 和 ASCII,但不起作用。经过 marshall 后,多行文本按照预期一一呈现。但在解码之后,所有行都在同一行中(被包裹起来)。使用 CDATAAdapter 和CharacterEscapeHandler 可以解决该问题,但我想知道一种不使用CharacterEscapeHandler 的方法。请回复是否有办法在 XML 属性中解码后保留\n 字符而不是使用空格。提前致谢

最佳答案

一个JAXB (JSR-222)默认情况下的实现不会删除任何换行符。

Java 模型 (Foo)

下面是一个简单的 Java 模型,具有一个 String 属性。

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Foo {

private String bar;

public String getBar() {
return bar;
}

public void setBar(String bar) {
this.bar = bar;
}

}

演示

下面的演示代码会将 XML 转换为对象,然后将其写回 XML。

import java.io.File;
import javax.xml.bind.*;

public class Demo {

public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);

Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum16690011/input.xml");
Foo foo = (Foo) unmarshaller.unmarshal(xml);

Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}

}

输入.xml/输出

输入和输出都包含换行符。

<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>
A
B
C
</bar>
</foo>
<小时/>

更新

如果您的属性有一个通过 @XmlJavaTypeAdapter 注释与之关联的 XmlAdapter,那么这可能会解释该行为。

CollapsedStringAdapter

当 JAXB 模型是从 XML 模式生成并且节点的类型为 xs:token 时,它将被注释为:

@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
public String getBar() {
return bar;
}

您将得到以下输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
<bar>A B C</bar>
</foo>

标准化字符串适配器

当 JAXB 模型是从 XML 模式生成并且节点的类型为 xs:normalizedString 时,它将被注释为:

@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
public String getBar() {
return bar;
}

您将得到以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar> A B C </bar>
</foo>

关于java - 是否可以在不使用CharacterEscapeHandler的情况下使用CDATA在JAXB中进行编码和解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16690011/

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