我必须将XML解组到POJO,但是XML结构不好,我找不到实现该目标的方法。
XML结构:
<CURRENT_VALUES>
<agency>
<value xsi:type="xs:long" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">123</value>
</agency>
<company>
<value xsi:type="xs:long" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">1</value>
</company>
<channel>
<value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">TEST</value>
</channel>
</CURRENT_VALUES>
我这样创建了一个POJO:
public class EventoModel
{
private String agency;
private String company;
private String channel;
public String getAgency() {
return agency;
}
public void setAgency(String agency) {
this.agency = agency;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getChannel() {
return channel;
}
public void setChannel(String channel) {
this.channel = channel;
}
}
问题在于“值”元素。
当我尝试解组时,POJO属性为空(或为null)。
JAXBContext jaxbContext = JAXBContext.newInstance(EventoModel.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
XMLOutputter outputter = new XMLOutputter();
StringReader reader = new StringReader(outputter.outputString(xml));
EventoModel evento = (EventoModel) unmarshaller.unmarshal(reader);
答案 0 :(得分:1)
XML元素$("div").on("click", function(event) {
event.preventDefault();
$("html, body").animate({
scrollLeft: "100px"
}, "slow");
});
,<agency>
和<company>
具有相当复杂的嵌套结构。
因此,将它们建模为Java <channel>
属性太简单了。
相反,您需要一个单独的POJO类。
因为这三个具有相同的结构,所以我们可以为它们使用通用的类。
缺少更好的名称,我们将其称为String
类。
请注意,所有3个属性均由@XmlElement
注释。
Ìtem
@XmlRootElement(name = "CURRENT_VALUES")
@XmlAccessorType(XmlAccessType.FIELD)
public class EventoModel
{
@XmlElement
private Item agency;
@XmlElement
private Item company;
@XmlElement
private Item channel;
// public getters and setters (omitted here for brevity)
}
类如下所示。
它包含一个名为Item
的属性,用于对XML元素value
进行建模。
再次注意,该属性用@XmlElement
<value>
XML元素@XmlAccessorType(XmlAccessType.FIELD)
public class Item {
@XmlElement
private Value value;
// public getters and setters (omitted here for brevity)
}
仍然很复杂。
因此,我们需要另一个POJO类对其进行建模。我们将其称为<value>
类。
Value
和<value ...>
之间的XML文本由属性建模
</value>
,需要用@XmlValue
注释。
XML属性String text
由属性建模
xsi:type="..."
,需要由@XmlAttribute
注释。
特别注意其String type
参数,它对应于XML名称空间
由namespace
给出。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
下面的屏幕截图(从调试器中获取)将整体可视化 Java结构并确认解组工作正常: