XML对齐不合适

时间:2012-08-14 05:29:09

标签: xml jaxb

我使用jaxb创建了一个xml文件。但是有些元素没有正确对齐。

当我在字垫或记事本中打开xml时,属性的对齐方式不正确 例如,

<a>
  <b>
  <c>
  <d>
<e>

appears as,
  <a>
<b>
<c>
<d>
  <e>

可能是什么问题。

1 个答案:

答案 0 :(得分:2)

以下内容基于answer given by Markussimilar 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>