0

CharacterEscapeHandler を使用したくありません。どういうわけか、JAXB を使用してマーシャリングおよびアンマーシャリングした後に、Java 文字列 (XML 属性になる) に改行文字 (\n) が必要です。Marshaller の encoding プロパティを Unicode と ASCII に変更しようとしましたが、うまくいきません。マーシャリング後、予想どおり複数行のテキストが 1 つずつ表示されます。しかし、アンマーシャリングの後、すべての行が同じ行になります (まとめられます)。CDATAAdapter を CharacterEscapeHandler と共に使用すると問題は解決しますが、CharacterEscapeHandler を使用しない方法を知りたいです。空白を使用する代わりに、XML 属性で非整列化した後に \n 文字を保持する方法がある場合は返信してください。前もって感謝します

4

1 に答える 1

1

デフォルトのJAXB (JSR-222)実装では、改行文字は削除されません。

Java モデル (Foo)

String以下は、1 つのプロパティを持つ単純な 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>

アップデート

プロパティが注釈XmlAdapterを介して関連付けられている場合、これが動作を説明している可能性があります。@XmlJavaTypeAdapter

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>
于 2013-05-22T13:07:13.223 に答える