您的位置:首页 > 移动开发 > Objective-C

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

2017-03-23 09:48 525 查看
    *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.To
4000
String(),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节点为无规则例表!");
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: