0
目前,我在一個類中有許多不同的xml元素包裝。JAXB:使xml元素的名稱透明
我想爲xml元素的xml標籤添加一個屬性。 這將作爲我的應用程序的標誌。
每個xml元素都會有不同的屬性值,所以我想將它們打包在一起。
因此,我寫了一個有兩個字段的新對象。一個通用值字段和一個字符串字段用作屬性。
不幸的是,我無法找到一種方法來從值字段中提取值,而沒有「垃圾」xml標記的presens。
有沒有辦法做到這一點。 爲了更清楚我介紹了代碼的特定部分。
@XmlRootElement(name = "client")
class Client {
private List<String> names;
private List<Integer> salaries;
private List<Long> socialSecurityNos;
@XmlElementWrapper(name = "names")
@XmlElement(name = "name")
public List<String> getNames() {
return this.names;
}
@XmlElementWrapper(name = "salaries")
@XmlElement(name = "salary")
public List<String> getSalaries() {
return this.salaries;
}
@XmlElementWrapper(name = "socialsecuritynos")
@XmlElement(name = "socialsecurityno")
public List<String> getSocialSecurityNo() {
return this.socialSecurityNos;
}
...
...
}
這將產生以下XML
<foo>
<names>
<name>
George
</name>
<name>
John
</name>
</names>
<salaries>
<salaries>
...
...
</salaries>
</salaries>
<socialSecurityNo>
<socialSecurityNo>
...
...
</socialSecurityNo>
</socialSecurityNo>
</foo>
新值,屬性,我寫一類。
@XmlRootElement(name = "client")
class GenericElement <T> {
private String attribute;
private T value;
public T getValue() {
return this.value;
}
@XmlAttribute(name = "flag")
public String getAttribute() {
return this.attribute;
}
}
,當然還有我改變了列表類型
@XmlRootElement(name = "client")
class Client {
private List<GenericElement<String>> names;
private List<GenericElement<Integer>> salaries;
private List<GenericElement<Long>> socialSecurityNos;
...
...
我想要得到這樣的結果。
<foo>
<names>
<name flag="on">
George
</name>
...
<name flag="off">
John
</name>
</names>
....
.....
</socialSecurityNo>
</socialSecurityNo>
</foo>
取而代之,我用「垃圾」值標記得到它。
<foo>
<names>
<name flag="on">
<value>George</value>
</name>
...
<name flag="off">
<value>Value</value>
</name>
</names>
....
....
....................</value>
</socialSecurityNo>
</socialSecurityNo>
</foo>
顯然XmlValue只能用一個「已知」的類型不拋出NullPointerException異常編組中。 – Chrys
啊我看,它不適用於泛型類型。在這種情況下,[這](http://stackoverflow.com/questions/8807296/jaxb-generic-xmlvalue/8901997#8901997)其他答案應該做的伎倆。 –