xml字符串转换为map对象(一级节点)

import java.io.StringReader;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.jdom.Element;

 

import org.jdom.Document;

import org.jdom.input.SAXBuilder;

import org.xml.sax.InputSource;

/**
     * xml字符串转换为map对象(一级节点)
     *
     * @param xmlDoc
     * @return
     *
     * @author Alex
     * @version 创建时间:2018年8月29日 下午1:57:16
     */
    public static Map<String, String> xmlElements(String xmlDoc) {
        if (xmlDoc != null && !xmlDoc.equals("")) {
            Pattern p = Pattern.compile("\r|\n");
            Matcher m = p.matcher(xmlDoc);
            xmlDoc = m.replaceAll("");
        }
        Map<String, String> map = new HashMap<String, String>();
        // 创建一个新的字符串
        StringReader read = new StringReader(xmlDoc);
        // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
        InputSource source = new InputSource(read);
        // 创建一个新的SAXBuilder
        SAXBuilder sb = new SAXBuilder();

        try {
            // 通过输入源构造一个Document
            Document doc = sb.build(source);
            // 取的根元素
            Element root = doc.getRootElement();
            // System.out.println(root.getName());//输出根元素的名称(测试)
            
            // 得到根元素所有子元素的集合
            List<?> jiedian = root.getChildren();

            for (int i = 0; i < jiedian.size(); i++) {
                Element et = (Element) jiedian.get(i);// 循环依次得到子元素
                map.put(et.getName(), et.getTextTrim());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return map;
    }

转载于:https://my.oschina.net/u/4048873/blog/2989308

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java中的XML解析库来将XML字符串转换Map对象。以下是一种实现方式: ```java import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*; import java.util.*; public class XmlToMapConverter { public static Map<String, Object> xmlToMap(String xmlString) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); InputStream inputStream = new ByteArrayInputStream(xmlString.getBytes("UTF-8")); Document doc = builder.parse(inputStream); Element root = doc.getDocumentElement(); return elementToMap(root); } private static Map<String, Object> elementToMap(Element element) { Map<String, Object> map = new LinkedHashMap<>(); NodeList nodes = element.getChildNodes(); if (nodes.getLength() == 1 && nodes.item(0) instanceof Text) { map.put(element.getNodeName(), element.getTextContent()); return map; } for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item(i); if (node instanceof Element) { Element childElement = (Element) node; Map<String, Object> childMap = elementToMap(childElement); String nodeName = childElement.getNodeName(); if (map.containsKey(nodeName)) { Object existingValue = map.get(nodeName); if (existingValue instanceof List) { ((List<Object>) existingValue).add(childMap); } else { List<Object> newList = new ArrayList<>(); newList.add(existingValue); newList.add(childMap); map.put(nodeName, newList); } } else { map.put(nodeName, childMap); } } } return map; } } ``` 你可以使用`xmlToMap`方法来将XML字符串转换Map对象。以下是一个示例: ```java String xmlString = "<root><name>John</name><age>30</age></root>"; Map<String, Object> map = XmlToMapConverter.xmlToMap(xmlString); System.out.println(map); ``` 输出结果为: ``` {root={name=John, age=30}} ``` 请注意,此实现假设XML中没有重复的节点名称。如果XML中存在重复的节点名称,可以使用`List<Object>`来保存相同节点名称的多个值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值