在 Java 中将 XML 转换为 Map 的过程涉及到解析 XML 文档并将其转换为数据结构。以下是两种常见的方式来实现这个目标,包括每种方式的步骤流程和示例代码:
这种方法使用 Java 内置的 XML 解析器(如 DOM)来解析 XML 文档并将其转换为 Map。以下是步骤流程:
以下是示例代码:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.InputStream;
import java.util.*;
public class XmlToMapUsingDom {
public static void main(String[] args) throws Exception {
InputStream inputStream = XmlToMapUsingDom.class.getResourceAsStream("data.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(inputStream);
Map<String, Object> resultMap = new HashMap<>();
Element root = document.getDocumentElement();
parseElement(root, resultMap);
System.out.println(resultMap);
}
private static void parseElement(Element element, Map<String, Object> map) {
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node node = children.item(i);
if (node instanceof Element) {
Element child = (Element) node;
if (child.hasChildNodes()) {
Map<String, Object> childMap = new HashMap<>();
parseElement(child, childMap);
putValue(map, child.getNodeName(), childMap);
} else {
putValue(map, child.getNodeName(), child.getTextContent());
}
}
}
}
private static void putValue(Map<String, Object> map, String key, Object value) {
if (map.containsKey(key)) {
Object existingValue = map.get(key);
if (existingValue instanceof List) {
((List) existingValue).add(value);
} else {
List<Object> values = new ArrayList<>();
values.add(existingValue);
values.add(value);
map.put(key, values);
}
} else {
map.put(key, value);
}
}
}
这种方法使用 Jackson 库来解析 XML 文档并将其转换为 Map。以下是步骤流程:
导入所需的类库:
Maven 依赖坐标:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.12.5</version>
</dependency>
Gradle 依赖坐标:
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.12.5'
解析 XML 文档:
使用 Jackson 库的 XmlMapper
来读取 XML 文档并将其转换为 Map。
获取 Map 数据:
获取从 XML 转换而来的 Map 对象。
以下是示例代码:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.InputStream;
import java.util.Map;
public class XmlToMapUsingJackson {
public static void main(String[] args) throws Exception {
InputStream inputStream = XmlToMapUsingJackson.class.getResourceAsStream("data.xml");
XmlMapper xmlMapper = new XmlMapper();
Map<String, Object> resultMap = xmlMapper.readValue(inputStream, Map.class);
System.out.println(resultMap);
}
}
无论您选择哪种方式,都可以根据需要进一步处理转换后的 Map 数据以满足您的业务需求。请注意,示例代码中的"data.xml"是 XML 文件的路径,您需要将其替换为您自己的 XML 文件路径。