首先。抱歉英语不好。
我想根据给定的 XSD 以这种方式对 Map 进行一些“常见”转换:
- Map 的键将等于 XML 中的标签名称
- XML中的标签名称在不同节点(级别)中不会重复
- Map 中的值可以包含例如代表节点中可重复标签的 Map 列表
- 创建的 xml 必须符合 xsd。
- 等等。
所以我正在寻找一种有效的方法来实现这一点。
有没有人做过类似的任务并且可以帮助我?
任何建议将不胜感激。提前致谢!
附注例子。
Map:
"fname" : "Asdf"
"lname" : "Fdsa"
"cars" : "car" {"car1", "car2", "car3"}
XML:
<fname>Asdf</fname>
<lname>Fdsa</lname>
<cars>
<car>car1</car>
<car>car2</car>
<car>car3</car>
</cars>
最佳答案
首先,您需要一个根元素。这是XML语法的要求。 现在您可以使用 JAXB。定义您的数据类:
@XmlType
public class Data {
private String fname;
private String lname;
private Collection<String> cars;
// getters
public String getFname() {
return fname;
}
public String getLname() {
return lname;
}
@XmlElementWrapper(name = "cars")
@XmlElement(name = "car")
public String getCars() {
return cars;
}
// setters.....
}
现在您可以创建此类实例的实例,调用所有 setter 来填充数据,然后调用:
JAXBContext ctx = JAXBContext.newInstance("com.yourpackage");
Marshaller m = ctx.createMarshaller();
m.marshal(data, System.out);
您将看到您的数据在 STDOUT 上序列化为 XML。
要解析 XML,请说:
JAXBContext ctx = JAXBContext.newInstance("com.panpwr.api.model.deployment");
Unmarshaller unmarshaller = ctx.createUnmarshaller();
Data data = (Data)unmarshaller.unmarshal(in); // in is the input stream for XML
// now your instance of data is populated from XML
关于java 通过 XSD 映射到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9566784/