import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class KeyValueToXmlConverter {
public static void main(String[] args) {
// 示例数据
Map<String, Object> data = new HashMap<>();
data.put("person", Map.of("name", "John", "age", 30, "email", "john@example.com"));
data.put("company", Map.of("name", "ABC Inc.", "address", "123 Main St", "website", "https://www.example.com"));
String xml = convertToXml(data);
System.out.println(xml);
}
public static String convertToXml(Map<String, Object> data) {
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElement("root");
doc.appendChild(root);
for (Map.Entry<String, Object> entry : data.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
Element element = doc.createElement(key);
root.appendChild(element);
if (value instanceof Map) {
Map<?, ?> subData = (Map<?, ?>) value;
for (Map.Entry<?, ?> subEntry : subData.entrySet()) {
String subKey = subEntry.getKey().toString();
Object subValue = subEntry.getValue();
Element subElement = doc.createElement(subKey);
subElement.appendChild(doc.createTextNode(subValue.toString()));
element.appendChild(subElement);
}
} else {
element.appendChild(doc.createTextNode(value.toString()));
}
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new StringBuilder());
transformer.transform(source, result);
return result.getWriter().toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
运行以上代码,将会输出转换后的XML字符串。
注意:上述示例只是简单演示了如何将key-value键值对的数据转换为XML格式,并根据key来匹配元素。在实际应用中,可能需要根据需求对数据结构和元素的创建进行更复杂的处理。