java 通过 XSD 映射到 XML

标签 java xml dictionary xsd

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

相关文章:

java - 无法解析 android Activity 中的方法 setHasOptionsMenu

javascript - jQuery .append() 没有换行符

c++ - 使用 C++ 将字符串拆分为键值对

vb.net - 在VB中将列表转换为字典

java - 有没有一种方法可以使用 SLF4J 样式的格式化函数来构建 Java 字符串?

java - org.hibernate.exception.JDBCConnectionException : Error calling DriverManager#getConnection

java - 在 java SimpleXML lib 中定义 schemaLocation?

xml - 在 SOAP UI 的测试用例 XPATH 上获取节点时出错

python - 根据同一字典中的另一个值设置值,python

java - 如何将 Pentaho Kettle 存储库配置到包含 Kettle ETL 脚本的文件夹和/或 SVN 存储库?