注:我是EclipseLink JAXB (MOXy)鉛和JAXB (JSR-222)專家小組的成員。
P.S.我知道MOXY JAXB實現,但我想知道是否可以通過引用JAXB實現來實現 。
爲了進行比較,我添加了如何使用EclipseLink JAXB(MOXy)的@XmlPath
擴展名完成此操作。
人
package forum12928971;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Person{
@XmlPath("firstName/@value")
String firstName;
@XmlPath("lastName/@value")
String lastName;
@XmlPath("email/@value")
String email;
}
JAXB。性能
要指定莫西爲您的JAXB提供者,你需要在同一個包添加一個名爲jaxb.properties
文件作爲您的域模型如下條目:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示
package forum12928971;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum12928971/input.xml");
Person person = (Person) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(person, System.out);
}
}
input.xml /輸出
<?xml version="1.0" encoding="UTF-8"?>
<person>
<firstName value="asd"/>
<lastName value="bcd"/>
<email value="qwe"/>
</person>
對於「JAXB在元素名稱和內容類型之間有明確的區別」 –