我想將一些XML解析爲Java,但是這個XML是一團糟。傑克遜在同一個POJO中映射不同的展開元素
因此,看起來像傑克遜只讀取每種類型的最後一個對象,每種類型的數組大小隻有一個對象。
編輯:這就是我想要做的(調試,看看錶單對象的值):
public class Main {
public static void main(String[] args) throws IOException {
XmlMapper mapper = new XmlMapper();
Form form = mapper.readValue(getXml(), Form.class);
}
public static String getXml() {
return "<forms>\n"
+ " <circles><x>1</x></circles>\n"
+ " <squares><x>1</x></squares>\n"
+ " <squares><x>1</x></squares>\n"
+ " <circles><x>1</x></circles>\n"
+ " <squares><x>1</x></squares>\n"
+ "</forms>";
}
}
@JacksonXmlRootElement(localName = "forms")
class Form {
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "circles", isAttribute = false)
private List<Circle> circles;
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "squares", isAttribute = false)
private List<Square> squares;
public List<Circle> getCircles() {
return circles;
}
public void setCircles(List<Circle> circles) {
this.circles = circles;
}
public List<Square> getSquares() {
return squares;
}
public void setSquares(List<Square> squares) {
this.squares = squares;
}
}
@JacksonXmlRootElement(localName = "circles")
class Circle {
@JacksonXmlProperty(isAttribute = false)
private String x;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
@JacksonXmlRootElement(localName = "squares")
class Square {
@JacksonXmlProperty(isAttribute = false)
private String x;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
}
您需要包含更多信息:確切地說,您不清楚您在做什麼以及如何做。所以,顯示使用情況的Java代碼會有所幫助。但我同意所示的代碼是一團糟,並且將其映射到任何可用的東西可能並不容易。但是你可以嘗試使用'@ JsonAnySetter',和/或在setter-methods中對那些不相交的'points'和'squares'元素進行特殊處理。 – StaxMan
更多信息已添加。 – carf
有關額外信息的任何想法? – carf