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

来源:互联网 发布:什么是网站数据接口 编辑:程序博客网 时间:2024/04/30 04:51

    *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 0
原创粉丝点击