2

クラスに次のフィールドがあります。

private List<String> messages;

私が持っているマッピングは次のとおりです。

<field name="messages" collection="arraylist" type="string" container="false>
  <bind-xml name="errors" node="element"/>
</field>

これは、マーシャリングの結果として得られるものです。

<errors><string>message1</string><string>message2</string></errors>

そして、これは私が達成したいことです:

<errors><error>message1</error><error>message2</error></errors>

どんな助けでも大歓迎です!

4

3 に答える 3

2

これを達成するためにマーシャリングを使用している理由はありますか? アンマーシャリング時にオブジェクトを再作成する方法を認識できるように、XML 出力を定義する一連の方法があります。したがって、マーシャリングを使用して XML 出力が本当に必要な場合は、Error という新しい型を作成する必要があると思います。リストは次のようになります。

private List<Error> messages;

そしてマッピング:

<field name="messages" collection="arraylist" type="error" container="false>
  <bind-xml name="errors" node="element"/>
</field>

または、xml 出力を作成するだけで、コンテンツが上記のように単純である場合は、リストをループして必要なコンテンツを正確に追加する toXml() メソッドを記述できます。逆は、DOM または SAX を使用して XML を解析し、文字列のリストを再構築する fromXml() メソッドで実行できます。

于 2010-04-08T09:44:17.033 に答える
1

JAXB を使用しないのはなぜですか?

import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

    @XmlRootElement
    public class Errors {

        private List<String> messages;

        @XmlElement(name="error")
        public List<String> getMessages() {
            return messages;
        }

        public void setMessages(List<String> messages) {
            this.messages = messages;
        }

    }

外部バインディング ファイルが必要な場合は、EclipseLink JAXB (MOXy)を使用できます。

<?xml version="1.0" encoding="UTF-8"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
    <java-types>
        <java-type name="Errors">
            <xml-root-element/>
            <java-attributes>
                <xml-element java-attribute="messages" name="error"/>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>
于 2010-07-09T20:50:52.420 に答える
0

これはずっと前に尋ねられたことは知っていますが、 の使用を検討することをお勧めしますcontainer="true"

于 2017-03-04T01:27:36.540 に答える