java处理字符串格式的xml信息并给出代码和示例 xml信息为OrganizationDepartmentDepartmentDevicesDeviceDeviceDevice id=1000028 type=601 name=报警主机 manufacturer=1 model=11 ip=101121 port=61006 user=admin password=31C22770AEA33
使用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字符串。
原文地址: http://www.cveoy.top/t/topic/ieOC 著作权归作者所有。请勿转载和采集!