jaxb を使用して xml ファイルを作成しました。ただし、一部の要素は適切に配置されていません。
ワードパッドまたはメモ帳で xml を開くと、属性の配置が適切ではありません。
<a>
<b>
<c>
<d>
<e>
appears as,
<a>
<b>
<c>
<d>
<e>
何が問題になる可能性があります。
以下は、同様の質問に対するMarkusの回答に基づいています。
入力.xml
多くのレベルのネストを持つ入力ドキュメントを使用します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo/>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
フー
以下は、XML にマップするドメイン モデルです。
package forum601143;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Foo {
private Foo foo;
public Foo getFoo() {
return foo;
}
public void setFoo(Foo foo) {
this.foo = foo;
}
}
デモ
このデモ コードでは、ドキュメントをアンマーシャリングしてからマーシャリングして戻します。Marshaller
出力をフォーマットする必要があることを指定しました。
package forum601143;
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/forum601143/input.xml");
Foo foo = (Foo) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
}
}
出力 - JAXB RI
RI のインデントは modulo 8 で行われるため、次の出力が表示されます。JAXB RI は設計どおりに機能しているため、この問題の「修正」はありません。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo/>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
出力 - EclipseLink JAXB (MOXy)
MOXyなどの別の JAXB ( JSR-222 ) 実装を使用しても、この動作は示されません。MOXy を JAXB プロバイダーとして使用するには、http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html を参照して ください。
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo>
<foo/>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>
</foo>