当前位置: 首页 > 工具软件 > XML to JSON > 使用案例 >

格式转换,XMLtoJSON

寇照
2023-12-01

格式转换,XMLtoJSON

最近项目里,要实现一个由XML文件获取信息,最终转换为JSON字符串的功能,自己实现了一个XML2JSON的工具类,供大家分享:
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.json.JSONObject;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

/**
 * @author chenhan
 * @Descriptions XML文件解析,返回对应的Json
 * @date 14-7-9 上午11:54
 */
public class Xml2JsonUtil {
    /**
     * 转换一个xml格式的字符串到json格式
     * @return 成功返回json 格式的字符串;失败反回null
     */
    public static  JSONObject xml2JSON() {
        JSONObject json = new JSONObject();
        try {
            //把要解析的XML文档转化为输入流,以便SAX解析器解析它
            InputStream is = <span style="font-family: Arial, Helvetica, sans-serif;">Xml2JsonUtil</span><span style="font-family: Arial, Helvetica, sans-serif;">.class.getClassLoader().getResourceAsStream("chartConfig.xml");</span>
            SAXBuilder sb = new SAXBuilder();
            Document doc = sb.build(is);
            //得到XML文档的根节点
            Element root = doc.getRootElement();
            //给json对象填充迭代好的数据
            json.put(root.getName(), iterateElement(root));
            return json;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 一个迭代方法
     * @param element
     * @return java.util.Map 实例
     */

    private static Map iterateElement(Element element) {
        //获得当前节点的所有子节点
        List node = element.getChildren();
        Element et = null;
        Map nodeMap = new HashMap();
        //List用于存node的迭代标签
        List list = null;

        for (int i = 0; i < node.size(); i++) {
            list = new LinkedList();
            et = (Element) node.get(i);
            //标签值为空
            if (et.getTextTrim().equals("")) {
                //System.out.println(et.getTextTrim());
                //非嵌套标签
                if (et.getChildren().size() == 0){
                    if (nodeMap.containsKey(et.getName())) {
                        list = (List) nodeMap.get(et.getName());
                    }
                    list.add(et.getText());
                    //nodeMap.put(et.getName(), list); 注销是因为此时如果传入list则会出现非嵌套的赋值错误
                    nodeMap.put(et.getName(),et.getText());
                }
                //嵌套标签
                else{
                    if (nodeMap.containsKey(et.getName())) {
                        list = (List) nodeMap.get(et.getName());
                     }
                    list.add(iterateElement(et));
                    //嵌套的标签,则需要传入list
                    nodeMap.put(et.getName(), list);
                }
            } else {
                if (nodeMap.containsKey(et.getName())) {
                    list = (List) nodeMap.get(et.getName());
                }
                list.add(et.getText());
                //nodeMap.put(et.getName(), list);
                nodeMap.put(et.getName(),et.getText());

            }
        }
        return nodeMap;
    }

    // 测试
    public static void main(String[] args) {
        System.out.println(Xml2JsonUtil.xml2JSON());
    }
}
其中 "chartConfig.xml"为需要解析的文件,大家可以自定义,
需要说明的是,需要引入jdom.jar 以及json.jar ,
值得一提的是,文中关于list的注释及修改,是对输出格式不正确的修改。


 类似资料: