将字符串格式的XML(包括自闭合xml)转换成JSONObject格式

使用方法:

JSONObject jsonObject=XmlToJson.convertXmlIntoJSONObject(xml);

方法源码:

package com.demo;

import java.io.IOException;
import java.io.StringWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;	
import org.dom4j.io.XMLWriter;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;

public class XmlToJson {
	
	/**
	 * 传入字符串格式的xml
	 * 将xml格式<a/>装换成<a></a>
	 * 再将xml装换成属性没有带"@"的JSONObject格式
	 * @author fyWang
	 * @data 2019-03-29
	 * */
	public static JSONObject convertXmlIntoJSONObject (String xml){
		JSONObject jsonObject=new JSONObject();
		try {
		    Document xmlDocument = DocumentHelper.parseText(xml);
		    OutputFormat format = new OutputFormat();
		    format.setEncoding("UTF-8");
		    format.setExpandEmptyElements(true);
		    StringWriter out = new StringWriter();
		    XMLWriter writer = new XMLWriter(out, format);
		    try {
		        writer.write(xmlDocument);
		        writer.flush();
		    } catch (IOException e) {
		        e.printStackTrace();
		    }
		    //out.toString() 此结果为xml的<a></a>格式
		    jsonObject=XML.toJSONObject(out.toString());
		} catch (DocumentException e1) {
			e1.printStackTrace();
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return jsonObject;
	}
}

测试:

public static void main(String[] args) {
    String xml="<?xml version='1.0' encoding='UTF-8'?>"+
       "<data>"+
	"<name>王甫岩</name>"+
	"<sex>男</sex>"+
	"<age>23</age>"+
	"<address key='地址' value='广东广州' />"+
	"</data>";
System.out.println("原XML:\n"+xml+"\n");
System.out.println("XML装换的JSON:\n"+XmlToJson.convertXmlIntoJSONObject(xml));
}

测试结果:

原XML:
<?xml version='1.0' encoding='UTF-8'?><data><name>王甫岩</name><sex>男</sex><age>23</age><address key='地址' value='广东广州' /></data>

XML装换的JSON:
{"data":{"sex":"男","address":{"value":"广东广州","key":"地址"},"age":"23","name":"王甫岩"}}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值