1
我正在尝试使用JAXB读取一个xml。无法使用JAXB获取属性值(对于父类中的属性)
我正面临着一个奇怪的问题,父母的属性没有被读取,但子类的属性被读取。 我曾经参考论坛,但这似乎是一个奇怪的。
任何人都可以让我知道我在做什么错误。
XML。
<?xml version="1.0" encoding="UTF-8"?>
<PhoneDirectory>
<Exchange exchangeName="ashfield2133">Ashfield</Exchange>
<PhoneNumber id="23" number="0489524401">
<FirstName>Test</FirstName>
<LastName>Test</LastName>
<Address>#34,rt road, State,Country,22344 </Address>
</PhoneNumber>
<PhoneNumber id="88" number="0409545401">
<FirstName>Testf2</FirstName>
<LastName>Testl2</LastName>
<Address>St 2 , State,Country,34555</Address>
</PhoneNumber>
<PhoneNumber id="88" number="0446775401">
<FirstName>Testf3</FirstName>
<LastName>Testl3</LastName>
<Address>St 3 , State,Country,546777</Address>
</PhoneNumber>
</PhoneDirectory>
PhoneDirectory类
package com.test.phoneDirectory.dataclass;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name="PhoneDirectory")
public class PhoneDirectory {
private String exchange;
private String exchangeName;
@XmlElement(name="Exchange")
public String getExchange() {
return exchange;
}
public void setExchange(String exchange) {
this.exchange = exchange;
}
@XmlAttribute(name="exchangeName")
public String getExchangeName() {
return exchangeName;
}
public void setExchangeName(String exchangename) {
this.exchangeName = exchangename;
}
private List<PhoneNumber> phoneNumber;
@XmlElement(name="PhoneNumber")
public List<PhoneNumber> getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(List<PhoneNumber> phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
******中国类
package com.test.phoneDirectory.dataclass;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="PhoneNumber")
public class PhoneNumber {
private String id;
private String number;
private String firstName;
private String lastName;
private String address;
@XmlAttribute(name="id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlAttribute(name="number")
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@XmlElement(name="FirstName")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement(name="LastName")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@XmlElement(name="Address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Main类
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import com.test.phoneDirectory.dataclass.PhoneDirectory;
import com.test.phoneDirectory.dataclass.PhoneNumber;
public class GetAllPhoneData {
public static void main(String[] args) throws JAXBException {
// TODO Auto-generated method stub
JAXBContext jc = JAXBContext.newInstance(PhoneDirectory.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
PhoneDirectory phoneDirectory = (PhoneDirectory) unmarshaller.unmarshal(new File("src/config/PhoneDirectory.xml"));
System.out.println("Get all phone details");
System.out.println("Exchange:"+phoneDirectory.getExchange());
System.out.println("exchangeName:"+phoneDirectory.getExchangeName());
for (PhoneNumber phonedetails : phoneDirectory.getPhoneNumber()) {
System.out.println(phonedetails.getId());
System.out.println(phonedetails.getNumber());
System.out.println(phonedetails.getFirstName());
System.out.println(phonedetails.getLastName());
System.out.println(phonedetails.getAddress());
}
}
}
输出
Get all phone details
Exchange: Ashfield
****Get exchangeName :null****
23
0489524401
Test
Test
#34,rt road, State,Country,22344
正如你可以看到exchangeName是,尽管提XMLAttribute注解现场空。
感谢, 毗湿奴
完美。非常感谢您指出。 :)它现在工作。 – VVP