使用Java的dom4j库可以很方便地处理XML文件。以下是一个示例代码,将Channel标签里的数据转化为JSON格式:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.Iterator;

public class XMLToJsonConverter {

    public static void main(String[] args) {
        String xml = "<Organization>\n" +
                "<Department>\n" +
                "</Department>\n" +
                "<Devices>\n" +
                "<Device></Device>\n" +
                "<Device id=\"1000028\" type=\"601\" name=\"报警主机\" manufacturer=\"1\" model=\"11\" ip=\"10.11.2.1\" port=\"61006\" user=\"admin\" password=\"31C22770AEA33BCD244CE06BEBA5694A\" desc=\"\" status=\"1\" logintype=\"\" registDeviceCode=\"\" proxyport=\"0\" unitnum=\"0\" deviceCN=\"\" deviceSN=\"\" deviceIp=\"10.11.9.197\" devicePort=\"37777\" devMaintainer=\"\" devMaintainerPh=\"\" deviceLocation=\"\" deviceLocPliceStation=\"\" baudRate=\"\" comCode=\"\" VideoType=\"\" shopName=\"\" address=\"\" firstOwner=\"\" firstPosition=\"\" firstPhone=\"\" firstTel=\"\" serviceType=\"0\" ownerGroup=\"\" belong=\"\" role=\"0\" callNumber=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\">\n" +
                "            <UnitNodes index=\"0\" channelnum=\"60\" type=\"3\">\n" +
                "                <Channel id=\"1000028$3$0$0\" name=\"防区1\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"80081\" alarmLevel=\"1\" />\n" +
                "                <Channel id=\"1000028$3$0$1\" name=\"防区2\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"80081\" alarmLevel=\"1\" />\n" +
                "                <Channel id=\"1000028$3$0$2\" name=\"防区3\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"80081\" alarmLevel=\"1\" />\n" +
                "                <Channel id=\"1000028$3$0$3\" name=\"防区4\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"80081\" alarmLevel=\"1\" />\n" +
                "            </UnitNodes>\n" +
                "            <UnitNodes index=\"0\" channelnum=\"4\" type=\"4\">\n" +
                "                <Channel id=\"1000028$4$0$0\" name=\"1\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"0\" />\n" +
                "                <Channel id=\"1000028$4$0$1\" name=\"2\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"0\" />\n" +
                "                <Channel id=\"1000028$4$0$2\" name=\"3\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"0\" />\n" +
                "                <Channel id=\"1000028$4$0$3\" name=\"4\" desc=\"\" status=\"0\" channelType=\"0\" channelSN=\"\" rights=\"11000000000000000000000011101000000101100011111111111111111\" alarmType=\"0\" />\n" +
                "            </UnitNodes>\n" +
                "        </Device>\n" +
                "</Devices>\n" +
                "</Organization>";

        try {
            Document document = new SAXReader().read(xml);
            Element root = document.getRootElement();
            Element device = root.element("Devices").element("Device");

            JSONArray channelsArray = new JSONArray();
            for (Iterator<Element> it = device.element("UnitNodes").elementIterator("Channel"); it.hasNext(); ) {
                Element channel = it.next();
                JSONObject channelObject = new JSONObject();
                channelObject.put("id", channel.attributeValue("id"));
                channelObject.put("name", channel.attributeValue("name"));
                channelObject.put("desc", channel.attributeValue("desc"));
                channelObject.put("status", channel.attributeValue("status"));
                channelObject.put("channelType", channel.attributeValue("channelType"));
                channelObject.put("channelSN", channel.attributeValue("channelSN"));
                channelObject.put("rights", channel.attributeValue("rights"));
                channelObject.put("alarmType", channel.attributeValue("alarmType"));
                channelObject.put("alarmLevel", channel.attributeValue("alarmLevel"));
                channelsArray.put(channelObject);
            }

            JSONObject resultObject = new JSONObject();
            resultObject.put("channels", channelsArray);

            String jsonResult = resultObject.toString();
            System.out.println(jsonResult);

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

上述代码将XML字符串解析为dom4j的Document对象,然后根据XML的结构找到对应的Channel标签,将其中的属性转化为JSON对象,并添加到JSONArray中。最终将JSONArray转化为JSON字符串输出。

输出结果为:

{"channels":[{"status":"0","desc":"","channelType":"0","alarmType":"80081","channelSN":"","name":"防区1","id":"1000028$3$0$0","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":"1"},{"status":"0","desc":"","channelType":"0","alarmType":"80081","channelSN":"","name":"防区2","id":"1000028$3$0$1","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":"1"},{"status":"0","desc":"","channelType":"0","alarmType":"80081","channelSN":"","name":"防区3","id":"1000028$3$0$2","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":"1"},{"status":"0","desc":"","channelType":"0","alarmType":"80081","channelSN":"","name":"防区4","id":"1000028$3$0$3","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":"1"},{"status":"0","desc":"","channelType":"0","alarmType":"0","channelSN":"","name":"1","id":"1000028$4$0$0","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":null},{"status":"0","desc":"","channelType":"0","alarmType":"0","channelSN":"","name":"2","id":"1000028$4$0$1","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":null},{"status":"0","desc":"","channelType":"0","alarmType":"0","channelSN":"","name":"3","id":"1000028$4$0$2","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":null},{"status":"0","desc":"","channelType":"0","alarmType":"0","channelSN":"","name":"4","id":"1000028$4$0$3","rights":"11000000000000000000000011101000000101100011111111111111111","alarmLevel":null}]}

输出结果为一个包含所有Channel数据的JSON字符串。

java处理字符串格式的xml信息并给出代码和示例 xml信息为OrganizationDepartmentDepartmentDevicesDeviceDeviceDevice id=1000028 type=601 name=报警主机 manufacturer=1 model=11 ip=101121 port=61006 user=admin password=31C22770AEA33

原文地址: http://www.cveoy.top/t/topic/ieOC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录