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节点为无规则例表!");
}
}
}
将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节点为无规则例表!");
}
}
}
相关文章推荐
- xml映射Map<String, String>和Map<String, Object>类型
- <String>XX</String>类型的XML解析
- Android中将List<Map<String, Object>>类型数据与字符串的相互转化
- Mybatis 如何 返回 List<String> 类型 或 List<Map<String,Object>>类型
- WCF 传输Dictionary<string, object>数据问题
- 获取KeyValuePair<string, object>)泛型结构的默认值
- 通过递归将list<Map<String,Object>>类型的数据转换为tree组件可识别的json数据
- HashMap<String, Object>中的Object以int类型取出
- Dictionary<string, object>
- private SortedDictionary<string, object> Dic_values = new SortedDictionary<string, object>();
- android之Intent复杂数据的传递(ArrayList<Object>类型的数据)
- xfire webService返回Map<String,List<E>>嵌套复杂类型
- android 子线程通过bundle、handler.sendMessage(message)向主线程传输多个类型数据,包括list<Map<String,Object>>
- List<HashMap<String,Object>>集合类型进行键值内容排序!
- List<Map<String, Object>>保存的是引用数据类型的地址
- Struts2接受参数的几种类型和接受复杂类型参数(list<String>和list<Object>)
- Dom4j解析XML文本,遍历指定节点下的节点内容和属性,并存入List<Map<String,Object>
- Dictionary 和 List<Dictionary<string, object>>
- List<Dictionary<string,object>> 排序测试
- Gson 反序列化Map<String, Object>类型的小问题