java
复制代码
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
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;
//根据动态属性,生成XML文件
public static void generateXmlFromMap(Map<String, String> data, String rootName, String filePath) {
try {
// 创建 XML 文档
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
// 创建根节点
Element root = doc.createElement(rootName);
doc.appendChild(root);
// 遍历 Map,每个 key 作为标签名,value 作为文本内容
for (Map.Entry<String, String> entry : data.entrySet()) {
String tagName = entry.getKey();
String value = entry.getValue() == null ? "" : entry.getValue().trim();
Element element = doc.createElement(tagName);
element.setTextContent(value);
root.appendChild(element);
}
// 写出到文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 美化格式
transformer.transform(new DOMSource(doc), new StreamResult(new File(filePath)));
System.out.println("XML 文件已生成:" + filePath);
} catch (Exception e) {
e.printStackTrace();
}
}
// 测试
public static void main(String[] args) {
// 模拟从 JSON
Map<String, String> data = new HashMap<>();
data.put("archiveNumber", "JZ-2025-0000");
data.put("archiveDate", "2025-11-20");
data.put("operUser", "张三");
data.put("archiveTitle", "2025年11月记账凭证");
data.put("creater", "张三");
// 生成 XML
generateXmlFromMap(data, "Archive", "archive.xml");
}