我已经使用 jaxb 创建了一个 xml 文件。然而,有些元素没有正确对齐。
当我在写字板或记事本中打开 xml 时,属性的对齐方式不适合例如,
<a>
<b>
<c>
<d>
<e>
appears as,
<a>
<b>
<c>
<d>
<e>
可能是什么问题呢。
输入.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 中的缩进以 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)
使用另一个 JAXB ( JSR-222 ) 实现,例如MOXy并不能证明这种行为。要将 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>