我无法查找元素的属性值。我的XML是
<Person>
<BirthDate>2008-01-04</BirthDate>
<FirstName>Affo</FirstName>
<Gender tc="200">Male</Gender>
<LastName></LastName>
<Occupation>false</Occupation>
<Age>4</Age>
</Person>
我对<Gender tc="200">Male</Gender>
感兴趣。我的POJO看起来像这样:
private String FirstName;
private String LastName;
private String Occupation;
@XStreamAsAttribute
@XStreamAlias("tc")
private String genderTC;
private String Gender;
private String birthDate;
private int age;
来自XML
XStream stream = new XStream(new DomDriver());
stream.processAnnotations(PersonType.class);
PersonType person = (PersonType) stream.fromXML(file);
System.out.println(person.getFirstName());
System.out.println(person.getGenderTC());
System.out.println(person.getGender());
这里person.getGenderTC()
我得到了空。有趣的是,当我颠倒过程并使用相同的PersonType pojo生成xml时,我得到了以下XML:
<Person tc="111">
<FirstName>Himanshu</FirstName>
<Gender>M</Gender>
<Age>28</Age>
</Person>
答案 0 :(得分:3)
@BlaiseDoughan这很棒,感谢您的支持。你能 请告诉我如何将EclipseLink MOXy与我的项目集成 不使用jaxb.properties?要包含哪些库/ JAR? 在我之间我了解EclipseLink JAXB(MOXy)实现 属性。我唯一的预感是jaxb.properties文件。
<强>人强>
以下是如何使用MOXy的@XmlPath
注释来执行您正在寻找的映射:
package forum11417620;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name="Person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
@XmlElement(name="FirstName")
private String firstName;
@XmlElement(name="LastName")
private String lastName;
@XmlElement(name="Occupation")
private String occupation;
@XmlPath("Gender/@tc")
private String genderTC;
@XmlPath("Gender/text()")
private String gender;
@XmlElement(name="BirthDate")
private String birthDate;
@XmlElement(name="Age")
private int age;
}
<强>演示强>
下面是一个如何在没有JAXBContext
文件的情况下引导MOXy jaxb.properties
的示例。
package forum11417620;
import java.io.File;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Person.class}, null);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum11417620/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>Affo</FirstName>
<LastName></LastName>
<Occupation>false</Occupation>
<Gender tc="200">Male</Gender>
<BirthDate>2008-01-04</BirthDate>
<Age>4</Age>
</Person>
必需的二进制文件(来自http://www.eclipse.org/eclipselink/downloads/)
选项#1 - EclipseLink JAR(来自Installer Zip)
选项#2 - MOXy包(来自OSGi Bundles Zip)
的的Maven 强> 的
我在Git Hub上有一些示例pom.xml
文件,作为我博客的一些示例的一部分:
答案 1 :(得分:2)
如你所知,这段代码:
@XStreamAsAttribute
@XStreamAlias("tc")
private String genderTC;
期望属性tc
位于XML的封闭Person
节点上。
我认为您需要定义第二个pojo类型来反序列化Gender数据,包括genderTC属性以及Gender元素。