我使用jaxb创建了一个xml文件。但是有些元素没有正确对齐。
当我在字垫或记事本中打开xml时,属性的对齐方式不正确 例如,
<a>
<b>
<c>
<d>
<e>
appears as,
<a>
<b>
<c>
<d>
<e>
可能是什么问题。
答案 0 :(得分:2)
以下内容基于answer given by Markus到similar question:
<强> input.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>