3

次の言語差別化を使用した REST xml フィードがあります。

<name xml:lang="cs">Letní 2001/2002</name>
<name xml:lang="en">Summer 2001/2002</name>

lang 属性は、name 以外の複数の異なる要素で発生します。選択した言語に基づいて、要素の 1 つだけを使用して簡単にアンマーシャリングする方法はありますか? または、それらの両方を取得しListますか?Map

要素ごとに異なるクラスを作成することで実現できることはわかっていますが、リソースごとに言語を選択するという理由だけで 50 個のクラスを作成したくはありません。

編集: MOXy についてはまだ検討していません。JAXB だけでこれを行うことができない場合は、おそらく検討する必要があります。

4

1 に答える 1

0

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB (JSR-222)エキスパート グループのメンバーです。

@XmlPathMOXy を使用すると、拡張子を使用して XML 属性の値に基づいて要素にマップできます。

Java モデル (Foo)

import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {

    @XmlPath("name[@xml:lang='cs']/text()")
    private String csName;

    @XmlPath("name[@xml:lang='en']/text()")
    private String enName;

}

デモ

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/forum17731167/input.xml");
        Foo foo = (Foo) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(foo, System.out);
    }

}

詳細については

于 2013-07-18T18:59:00.670 に答える