3

我有一个 REST xml 提要,其中包含以下语言区分用法

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

lang 属性与多个不同的元素一起出现,除了名称。有没有办法让我根据所选语言仅使用一个元素轻松解组它?或者两者都获得一个List或更好的一个Map

我知道我可以通过为每个元素创建一个不同的类来做到这一点,但我不想仅仅因为每种资源的语言选择而有五十个类。

编辑:我还没有考虑过 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 回答