zoukankan
html css js c++ java
XmlToJsonxml对象转换为Json对象类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Collections; namespace Framework { /// <summary> /// 将xml转换为json /// </summary> public class XmlToJson { /// <summary> /// 将xml转换为json /// </summary> /// <param name="xmlFile">xml文件</param> /// <returns></returns> public static string XmlToJSON(string xmlFile) { XmlDocument doc = new XmlDocument(); doc.Load(xmlFile); return XmlToJSON(doc); } /// <summary> /// 将xml转换为json /// </summary> /// <param name="xmlDoc">xml文档</param> /// <returns></returns> public static string XmlToJSON(XmlDocument xmlDoc) { StringBuilder sbJSON = new StringBuilder(); sbJSON.Append("{ "); XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true); sbJSON.Append("}"); return sbJSON.ToString(); } // XmlToJSONnode: Output an XmlElement, possibly as part of a higher array private static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName) { if (showNodeName) sbJSON.Append("\"" + SafeJSON(node.Name) + "\": "); sbJSON.Append("{"); // Build a sorted list of key-value pairs // where key is case-sensitive nodeName // value is an ArrayList of string or XmlElement // so that we know whether the nodeName is an array or not. SortedList childNodeNames = new SortedList(); // Add in all node attributes if (node.Attributes != null) foreach (XmlAttribute attr in node.Attributes) StoreChildNode(childNodeNames, attr.Name, attr.InnerText); // Add in all nodes foreach (XmlNode cnode in node.ChildNodes) { if (cnode is XmlText) StoreChildNode(childNodeNames, "value", cnode.InnerText); else if (cnode is XmlElement) StoreChildNode(childNodeNames, cnode.Name, cnode); } // Now output all stored info foreach (string childname in childNodeNames.Keys) { ArrayList alChild = (ArrayList)childNodeNames[childname]; if (alChild.Count == 1) OutputNode(childname, alChild[0], sbJSON, true); else { sbJSON.Append(" \"" + SafeJSON(childname) + "\": [ "); foreach (object Child in alChild) OutputNode(childname, Child, sbJSON, false); sbJSON.Remove(sbJSON.Length - 2, 2); sbJSON.Append(" ], "); } } sbJSON.Remove(sbJSON.Length - 2, 2); sbJSON.Append(" }"); } // StoreChildNode: Store data associated with each nodeName // so that we know whether the nodeName is an array or not. private static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue) { // Pre-process contraction of XmlElement-s if (nodeValue is XmlElement) { // Convert <aa></aa> into "aa":null // <aa>xx</aa> into "aa":"xx" XmlNode cnode = (XmlNode)nodeValue; if (cnode.Attributes.Count == 0) { XmlNodeList children = cnode.ChildNodes; if (children.Count == 0) nodeValue = null; else if (children.Count == 1 && (children[0] is XmlText)) nodeValue = ((XmlText)(children[0])).InnerText; } } // Add nodeValue to ArrayList associated with each nodeName // If nodeName doesn't exist then add it object oValuesAL = childNodeNames[nodeName]; ArrayList ValuesAL; if (oValuesAL == null) { ValuesAL = new ArrayList(); childNodeNames[nodeName] = ValuesAL; } else ValuesAL = (ArrayList)oValuesAL; ValuesAL.Add(nodeValue); } private static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName) { if (alChild == null) { if (showNodeName) sbJSON.Append("\"" + SafeJSON(childname) + "\": "); sbJSON.Append("null"); } else if (alChild is string) { if (showNodeName) sbJSON.Append("\"" + SafeJSON(childname) + "\": "); string sChild = (string)alChild; sChild = sChild.Trim(); sbJSON.Append("\"" + SafeJSON(sChild) + "\""); } else XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName); sbJSON.Append(", "); } // Make a string safe for JSON private static string SafeJSON(string sIn) { StringBuilder sbOut = new StringBuilder(sIn.Length); foreach (char ch in sIn) { if (Char.IsControl(ch) || ch == '\'') { int ich = (int)ch; sbOut.Append(@"\u" + ich.ToString("x4")); continue; } else if (ch == '\"' || ch == '\\' || ch == '/') { sbOut.Append('\\'); } sbOut.Append(ch); } return sbOut.ToString(); } } }
查看全文
相关阅读:
设计模式之美学习-设计原则-面向对象基本概念(一)
redis-分布式锁-设计与使用
linux常用命令记录(一)
redis-布隆过滤器使用
jdk源码阅读-ConcurrentLinkedQueue(一)
支付宝支付接口-app支付沙箱环境
RocketMQ-安装
支付宝支付接口-运行支付宝demo
elasticsearch-文档-父子文档(十一)
RTMPdump 源代码分析 1: main()函数
原文地址:https://www.cnblogs.com/zhangqs008/p/2341092.html
最新文章
2015湘潭市第七届大学生程序设计竞赛 —— Fraction
hdu 2121 Ice_cream’s world II (无定根最小树形图)
poj 3164 Command Network (朱刘算法)
UVA 10462 Is There A Second Way Left? (次小生成树+kruskal)
UVA 10600 ACM Contest and Blackout (次小生成树)
poj 2349 Arctic Network(最小生成树的第k大边证明)
poj 1751 Highways (最小生成树)
C/C++中qsort()以及sort()的用法
poj 2195 Going Home (km算法)
India and China Origins---hdu5652(二分 + bfs)或者(并查集)
热门文章
Monkey Tradition---LightOj1319(中国剩余定理模板)
个人理解---中国剩余定理
Romantic---hdu2669(扩展欧几里德模板)
个人理解---扩展欧几里德定理
个人理解---KMP与Next数组详解
Tr A--hdu1575(矩阵快速幂)
King's Game---hdu5643(约瑟夫环)
哈密顿绕行世界问题---hdu2181(全排列问题)
C. Mail Stamps---cf29c(离散化,图)
设计模式之美学习-传统MVC和DDD充血模型(二)
Copyright © 2011-2022 走看看