如何将此XML转换为Java对象?
<template>
<condition name="A">
<li value="A">
<condition name="B">
<li value="BB">Value B</li>
<li value="BBB">Value BBB</li>
</condition>
</li>
<li>
<condition name="C">
<li value="CC">Value CC</li>
<li value="CCC">Value CCC</li>
<li>
<condition name="D">
<li value="DD">Value DD</li>
<li value="DDD">Value DDD</li>
</condition>
</li>
</condition>
</li>
</condition>
</template>
Condition
必须包含Li
代码,而li
代码可能包含另一个condition
,而condition
代码li
可能包含另一个代码condition
{1}}标记。
答案 0 :(得分:0)
JAXB,
首先,您需要在XML之后创建一个模型类,然后使用JAXB转换为java obj
答案 1 :(得分:0)
您需要通过具有一些@Xml...
注释的相应Java类对XML元素建模。
这是相当直截了当的。
涉及递归的事实不会引起任何其他问题。
建模<template>
根元素(使用嵌套<condition>
元素)的类:
@XmlRootElement(name = "template")
@XmlAccessorType(XmlAccessType.FIELD)
public class Template {
@XmlElement(name = "condition")
private Condition condition;
// getters and setters
}
为<condition>
元素建模的类(具有嵌套的<li>
元素):
@XmlAccessorType(XmlAccessType.FIELD)
public class Condition {
@XmlAttribute(name = "name")
private String name;
@XmlElement(name = "li")
private List<ListItem> listItems;
// getters and setters
}
为<li>
元素建模的类(具有嵌套的<condition>
元素):
@XmlAccessorType(XmlAccessType.FIELD)
public class ListItem {
@XmlAttribute(name = "value")
private String value;
@XmlElement(name = "condition")
private Condition condition;
// getters and setters
}
您可以使用转换XML测试所有这些类 - &gt; Java - &gt;像这样的XML:
JAXBContext context = JAXBContext.newInstance(Template.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Template template = (Template) unmarshaller.unmarshal(new File("template.xml"));
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(template, System.out);