我有一个REST xml提要,其中包含以下语言区分用法
<name xml:lang="cs">Letní 2001/2002</name>
<name xml:lang="en">Summer 2001/2002</name>
lang属性出现多个不同的元素,而不是name。
有没有办法让我只使用基于所选语言的一个元素轻松解组它?或者获得List
或更好的Map
两者?
我知道我可以通过为每个元素创建一个不同的类来实现它,但我不想因为每个资源的语言选择而有50个类。
编辑:我还没有考虑过MOXy,如果仅靠JAXB无法完成,我可能不得不这样做。
答案 0 :(得分:0)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。
MOXy允许您使用@XmlPath
扩展名基于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);
}
}
了解更多信息