首页 > 代码库 > xml转datatable和json
xml转datatable和json
xml字符串转为DataTable与Json
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Xml;using System.Text;using System.Collections;using System.Data;/// <summary>///XmlHelper 的摘要说明/// </summary>public class XmlHelper{ public static string XmlToJSON(XmlDocument xmlDoc) { StringBuilder sbJSON = new StringBuilder(); sbJSON.Append("{ "); XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true); sbJSON.Append("}"); return sbJSON.ToString(); } public static DataTable XmlToDataTable(XmlDocument xmlDoc,string xmlPath) { XmlNodeList xlist = xmlDoc.SelectNodes(xmlPath); DataTable dt = new DataTable(); DataRow dr; for (int i = 0; i < xlist.Count; i++) { dr = dt.NewRow(); XmlElement xe = (XmlElement)xlist.Item(i); for (int j = 0; j < xe.Attributes.Count; j++) { if (!dt.Columns.Contains("@" + xe.Attributes[j].Name)) dt.Columns.Add("@" + xe.Attributes[j].Name); dr["@" + xe.Attributes[j].Name] = xe.Attributes[j].Value; } for (int j = 0; j < xe.ChildNodes.Count; j++) { if (!dt.Columns.Contains(xe.ChildNodes.Item(j).Name)) dt.Columns.Add(xe.ChildNodes.Item(j).Name); dr[xe.ChildNodes.Item(j).Name] = xe.ChildNodes.Item(j).InnerText; } dt.Rows.Add(dr); } return dt; } private static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName) { if (showNodeName) sbJSON.Append("\"" + SafeJSON(node.Name) + "\": "); sbJSON.Append("{"); SortedList childNodeNames = new SortedList(); if (node.Attributes != null) foreach (XmlAttribute attr in node.Attributes) StoreChildNode(childNodeNames, attr.Name, attr.InnerText); 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); } 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(" }"); } private static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue) { if (nodeValue is XmlElement) { 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; } } 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(", "); } 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(); }}
xml转datatable和json
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。