XML多层复杂结构转Dictionary<String,Object>类型

    *XML多层复杂结构转Dictionary<String,Object>类型

将XML字符串转换为泛型Dictionary

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Web.Script.Serialization;
using System.Collections;


namespace XMLhead
{
    class XMLConvert
    {
        /**
         * XML多层复杂结构转Dictionary<String,Object>类型
         * 
         * 将XML字符串转换为泛型
         * 
         */


        public static Dictionary<String,Object> ReadXMLToDictionary(String XmlStr)
        {
            XmlDocument _XmlDoc = new XmlDocument();
            _XmlDoc.LoadXml(XmlStr);


            Dictionary<String, Object> XmlObject = new Dictionary<String, Object>();
            if (_XmlDoc.DocumentElement.ChildNodes.Count <= 0) {
                throw new Exception("XML节点错误{节点值为0}!");            
            }


            if (XmlNodeRepeat(_XmlDoc.DocumentElement.ChildNodes))
            {
                XmlObject.Add(_XmlDoc.DocumentElement.Name, XMLList(_XmlDoc.DocumentElement.ChildNodes));
            }
            else
            {
                foreach (XmlNode TempObject in _XmlDoc.DocumentElement.ChildNodes)
                {
                    if (TempObject.ChildNodes.Count>1)
                    {
                        if (XmlNodeRepeat(TempObject.ChildNodes))
                        {
                            XmlObject.Add(TempObject.Name, XMLList(TempObject.ChildNodes));
                        }
                        else
                        {
                            XmlObject.Add(TempObject.Name, ObjectToDictionary(TempObject.ChildNodes));
                        }
                    }
                    else
                    {
                        XmlObject.Add(TempObject.Name, TempObject.InnerText);
                    }
                }
            }


            return XmlObject;
        }


        /**
         * 
         * 例表处理
         * 
         */ 
        private static ArrayList XMLList(XmlNodeList NodeObjects)
        {
                ArrayList XmlDictionary = new ArrayList();
                foreach (XmlNode TempObject in NodeObjects)
                {
                    Dictionary<String, Object> XmlListObject = new Dictionary<String, Object>();
                    XmlListObject.Add(TempObject.Name, ObjectToDictionary(TempObject.ChildNodes));
                    XmlDictionary.Add(XmlListObject);
                }
                return XmlDictionary;
        }


        /**
         * 
         * 
         * 单节点处理
         * 
         */ 
        private static Dictionary<String, Object> ObjectToDictionary(XmlNodeList NodeObjects) {


                Dictionary<String, Object> XmlObject = new Dictionary<String, Object>();
                foreach (XmlNode TempObject in NodeObjects)
                {
                    if (TempObject.ChildNodes.Count > 1)
                    {
                        if (XmlNodeRepeat(TempObject.ChildNodes))
                        {
                            XmlObject.Add(TempObject.Name, XMLList(TempObject.ChildNodes));
                        }
                        else
                        {
                            XmlObject.Add(TempObject.Name, ObjectToDictionary(TempObject.ChildNodes));
                        }
                    }
                    else {
                        XmlObject.Add(TempObject.Name, TempObject.InnerText);                    
                    }
                }
                return XmlObject;        
        }


        /**
         * 
         * 节点重复检测
         * 
         * 
         */ 
        private static Boolean XmlNodeRepeat(XmlNodeList ChildNodeObjects)
        {


            if (ChildNodeObjects.Count ==1 || ChildNodeObjects.Count == 0)
            {
                return false;
            }


            Dictionary<String, Int32> TempDictionary = new Dictionary<String, Int32>();
            foreach (XmlNode TempNode in ChildNodeObjects) {                    
                    if(!TempDictionary.ContainsKey(TempNode.Name.ToString())){
                        TempDictionary.Add(TempNode.Name.ToString(),0);
                    }else if(TempDictionary.ContainsKey(TempNode.Name.ToString())){
                        TempDictionary[TempNode.Name.ToString()]++;
                    }
                }


            if (ChildNodeObjects.Count == TempDictionary.Count)
            {
                return false;
            }
            else if (TempDictionary.Count == 1 && ChildNodeObjects.Count >1)
            {
                return true;
            }
            throw new Exception("XmlNode节点为无规则例表!");
        }


    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用以下代码将该XML转换为Map对象: ```java import java.io.StringReader; import java.util.HashMap; import java.util.Map; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlToMap { public static void main(String[] args) throws Exception { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <java version=\"1.6.0_26\" class=\"java.beans.XMLDecoder\"> <object class=\"java.util.HashMap\"> <void method=\"put\"> <string>att_20160719180419281NEk9</string> <string>cx</string> </void> <void method=\"put\"> <string>att_20160511094248589ZKYq</string> <string>cnmm</string> </void> <void method=\"put\"> <string>att_20161018153614188aTus</string> <string>zsx;fj</string> </void> <void method=\"put\"> <string>att_20160422110906494XuEf</string> <null/> </void> <void method=\"put\"> <string>att_20160511130210612UULE</string> <string>fjyxapp;jjgjapp;wx;jd;dxjg;tb;wsjy</string> </void> <void method=\"put\"> <string>att_20160719180542840LnFm</string> <string></string> </void> <void method=\"put\"> <string>att_20160511130025203ssle</string> <string>zdgsszta</string> </void> <void method=\"put\"> <string>att_20160810131359346N0ra</string> <string>szjys</string> </void> <void method=\"put\"> <string>att_20160511130031927equg</string> <string></string> </void> <void method=\"put\"> <string>att_20160422110456036qp7Y</string> <null/> </void> <void method=\"put\"> <string>att_20160422110543585f7iI</string> <string>cpjbxx</string> </void> </object> </java>"; Map<String, String> map = xmlToMap(xml); System.out.println(map); } public static Map<String, String> xmlToMap(String xml) throws Exception { Map<String, String> map = new HashMap<>(); SAXReader reader = new SAXReader(); Document document = reader.read(new StringReader(xml)); Element root = document.getRootElement().element("object"); for (Element element : root.elements("void")) { Element keyElement = element.element("string"); Element valueElement = element.elements().get(1); String key = keyElement.getText(); String value = valueElement == null ? null : valueElement.getText(); map.put(key, value); } return map; } } ``` 该代码使用Dom4j库解析XML,并将其转换为Map对象。输出结果为: ``` {att_20160719180419281NEk9=cx, att_20160511094248589ZKYq=cnmm, att_20161018153614188aTus=zsx;fj, att_20160422110906494XuEf=null, att_20160511130210612UULE=fjyxapp;jjgjapp;wx;jd;dxjg;tb;wsjy, att_20160719180542840LnFm=, att_20160511130025203ssle=zdgsszta, att_20160810131359346N0ra=szjys, att_20160511130031927equg=, att_20160422110456036qp7Y=null, att_20160422110543585f7iI=cpjbxx} ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值