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 のインデントは 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>
于 2012-08-14T11:03:18.443 に答える