【发布时间】:2016-03-31 23:01:55
【问题描述】:
我正在尝试将一些 XML 解析为 Java,但是这个 XML 非常混乱。
所以看起来杰克逊只读取了每种类型的最后一个对象,并且每种类型的数组大小只有一个对象。
编辑:这就是我想要做的(调试并查看表单对象的值):
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元素进行特殊处理。 -
关于额外信息的任何想法?
标签: java xml-parsing jackson