繁体   English   中英

可以在不使用CharacterEscapeHandler进行JAXB中的编组和解组的情况下使用CDATA

[英]Can CDATA be used without using CharacterEscapeHandler for marshaling and unmarshalling in JAXB

我不想使用CharacterEscapeHandler。 想要以某种方式希望Java字符串(将成为XML属性)中的换行符(\\ n)在使用JAXB进行编组和解组之后需要存在。 尝试将Marshaller中的编码属性更改为Unicode和ASCII,但不起作用。 封送处理后,多行文本按预期方式一一呈现。 但是在解组之后,所有行都在同一行中(包裹起来)。 将CDATAAdapter与CharacterEscapeHandler一起使用可解决此问题,但我想知道一种无需使用CharacterEscapeHandler的方法。 如果在XML属性中反编组后可以保留\\ n字符,而不用空格,请回答。 提前致谢

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

Java模型(Foo)

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

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);
    }

}

input.xml /输出

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

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

更新

如果您的媒体资源具有通过@XmlJavaTypeAdapter批注XmlAdapter关联的@XmlJavaTypeAdapter则可以解释此行为。

CollapsedStringAdapter

当从XML Schema生成JAXB模型并且节点的类型为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>

NormalizedStringAdapter

当从XML Schema生成JAXB模型并且节点的类型为xs:normalizedString ,将对其进行注释,如下所示:

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

您将获得以下输出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM