1

我已经使用 jaxb 创建了一个 xml 文件。然而,有些元素没有正确对齐。

当我在写字板或记事本中打开 xml 时,属性的对齐方式不适合例如,

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

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

可能是什么问题呢。

4

1 回答 1

2

以下内容基于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 中的缩进以 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>
于 2012-08-14T11:03:18.443 回答