gpt4 book ai didi

java 通过 XSD 映射到 XML

转载 作者:行者123 更新时间:2023-11-30 04:52:18 25 4
gpt4 key购买 nike

首先。抱歉英语不好。
我想根据给定的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com