java - 如何使用 XSD 和 JSON 或元素/值的 HashMap 作为输入,在 Java 中创建 XML

标签 java xml json jaxb xsd

我需要动态创建一个XML,并给定输入参数,如XSD文件和JSON字符串(如果需要,JSON消息可以转换为HashMap对象)。 Java 程序应将 JSON 字符串/HashMap 对象中存在的元素名称与 XSD 中存在的元素名称相关联,并相应地生成 XML。另请注意,我将有多个 XSD,其中一个将根据某种条件作为程序的输入传递。

输入数据:

1) JSON String:
---------------
    {
        "employeeInput":{
            "name":"someone",
            "age":"25",
            "street":"high street",
            "city":"Amsterdam"
        }
    }

    (or I can convert JSON string to HashMap object and send this object as input)

HashMap Object: 
---------------
    {employeeInput={name=someone, age=25, street=high street, city=Amsterdam}}

2) XSD File:
------------
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns="http://www.XYZOrganization.com/schemas/Request_Handler/Schema.xsd"
         targetNamespace="http://www.XYZOrganization.com/schemas/Request_Handler/Schema.xsd"
         elementFormDefault="qualified"
         attributeFormDefault="unqualified">
        <xs:element name="employeeInput">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="name"/>
                    <xs:element ref="age"/>
                    <xs:element ref="street"/>
                    <xs:element ref="city"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="age" type="xs:string"/>
        <xs:element name="street" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
    </xs:schema>

预期输出 XML(根据 XSD 具有命名空间和前缀):

    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:employeeInput xmlns:ns0="http://www.XYZOrganization.com/schemas/Request_Handler/Schema.xsd">
        <ns0:name>someone</ns0:name>
        <ns0:age>25</ns0:age>
        <ns0:street>high street</ns0:street>
        <ns0:city>Amsterdam</ns0:city>
    </ns0:employeeInput>

请告诉我是否有任何选项可以实现此目的。我读过有关 JAXB 编码的内容,但对如何实现它知之甚少。

谢谢

参数

最佳答案

<强>1。使用 Gson 将 Json 字符串解析为 Map ,从here下载

  JsonParser jsonParser = new JsonParser();
    JsonElement element = jsonParser.parse(Your_JSON_STRING_GOES_HERE).getAsJsonObject().get("employeeInput");
    Type typeOf = new TypeToken<Map<String, String>>(){}.getType();
    Map<String, String> map =gson.fromJson(element, typeOf);

<强>2。对于编码,您需要执行以下步骤

package-info.java

@XmlSchema(
        namespace = "http://www.XYZOrganization.com/schemas/Request_Handler/Schema.xsd",
        elementFormDefault = XmlNsForm.QUALIFIED,
         xmlns={@XmlNs(prefix="ns0", namespaceURI="http://www.XYZOrganization.com/schemas/Request_Handler/Schema.xsd")}
        ) 

package test;

import javax.xml.bind.annotation.*;

创建 Pojo 类。

@XmlRootElement(name="employeeInput")
public class Foo {

    private String name;
    private String age;
    private String street;
    private String city;
//setter/getter
}

从 map 填充 jaxb 模型类

// populate jaxb model class
        Foo foo = new Foo();
        foo.setAge(map.get("age"));
        foo.setCity(map.get("city"));
        foo.setName(map.get("name"));
        foo.setStreet(map.get("street"));

// finally Marshall it

Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.marshal(foo, System.out);

关于java - 如何使用 XSD 和 JSON 或元素/值的 HashMap 作为输入,在 Java 中创建 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23249140/

相关文章:

java - 什么时候必须在方法声明中使用 "throws"字?

java - 如何将 xml 文档元素解码到对象属性中?

几分钟后 JavaFX JSObject 停止工作?

xml - XQuery - 返回整个文档,而不仅仅是选择/修改的部分

xml - 使用 xslt 样式表将 xml 文档转换为逗号分隔 (CSV) 文件

java - 将 json 从 servlet 传递到 dojo

javascript - 如何使用 *ngFor 循环 [object Object]

java - 选择用于实现分布式消息传递算法的编程语言

java - 解析 XML,如果 CDATA 不包含 HTML 标记,则不返回任何字符串

javascript - 单击打开卡以显示更多详细信息