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