gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:55:36 24 4
gpt4 key购买 nike

我需要动态创建一个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/

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