彻底解析XML
先是两个正规的解析方法
#region 反序列化 /// <summary> /// 反序列化 /// </summary> /// <param name="type">类型</param> /// <param name="xml">XML字符串</param> /// <returns></returns> private static object Deserialize(Type type, string xml) { try { using (StringReader sr = new StringReader(xml)) { XmlSerializer xmldes = new XmlSerializer(type); return xmldes.Deserialize(sr); } } catch (Exception e) { return null; } } /// <summary> /// 反序列化 /// </summary> /// <param name="type"></param> /// <param name="xml"></param> /// <returns></returns> private static object Deserialize(Type type, Stream stream) { XmlSerializer xmldes = new XmlSerializer(type); return xmldes.Deserialize(stream); } #endregion #region 序列化 /// <summary> /// 序列化 /// </summary> /// <param name="type">类型</param> /// <param name="obj">对象</param> /// <returns></returns> private static string Serializer(Type type, object obj) { MemoryStream Stream = new MemoryStream(); XmlSerializer xml = new XmlSerializer(type); try { //序列化对象 xml.Serialize(Stream, obj); } catch (InvalidOperationException) { throw; } Stream.Position = 0; StreamReader sr = new StreamReader(Stream); string str = sr.ReadToEnd(); sr.Dispose(); Stream.Dispose(); return str; } #endregion
自己感觉挺麻烦,自己整个感觉简单的
1 /// <summary> 2 /// 解析Xml,返回Ilist<string>类型 3 /// </summary> 4 /// <param name="stringXml">XML string文档</param> 5 /// <param name="TipName">根节点名称</param> 6 /// <returns></returns> 7 private static IList<string> XmlDoc(string stringXml, string TipName = "root") 8 { 9 IList<string> XmlList = new List<string>(); 10 11 XmlDocument xmlDoc = new XmlDocument(); 12 xmlDoc.LoadXml(stringXml); 13 14 string firstNodeName = xmlDoc.DocumentElement.Name; 15 16 XmlNode rootNode = xmlDoc.SelectSingleNode(firstNodeName); 17 18 19 foreach (XmlNode xxNode in rootNode.ChildNodes) 20 { 21 if (xxNode.FirstChild != null) 22 { 23 if (xxNode.FirstChild.LastChild != null) 24 { 25 XmlList = XmlDoc("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + xxNode.OuterXml, TipName + "__" + xxNode.Name); 26 } 27 else 28 { 29 string dsf = xxNode.InnerText; 30 string sdf = TipName + "__" + xxNode.Name; 31 XmlList.Add(sdf); 32 XmlList.Add(dsf); 33 } 34 } 35 else 36 { 37 string dsf = xxNode.InnerText; 38 string sdf = TipName + "__" + xxNode.Name; 39 XmlList.Add(sdf); 40 XmlList.Add(dsf); 41 } 42 } 43 44 return XmlList; 45 } 46 47 48 /// <summary> 49 /// 返回字典类型,将解析的集合进行整理 50 /// </summary> 51 /// <param name="stringXml">XML string文档</param> 52 /// <returns></returns> 53 public static IDictionary<string, List<string>> XmlDoc(string stringXml) 54 { 55 IList<string> XmlList = new List<string>(); 56 57 XmlDocument xmlDoc = new XmlDocument(); 58 xmlDoc.LoadXml(stringXml); 59 60 string TipName = xmlDoc.DocumentElement.Name; 61 62 63 IList<string> xmlDocCollect = XmlDoc(stringXml, TipName); 64 65 IDictionary<string, List<string>> xmlElementCollect = new Dictionary<string, List<string>>(); 66 67 for (int i = 0; i < xmlDocCollect.Count(); i++) 68 { 69 if (xmlElementCollect.Keys.Contains(xmlDocCollect[i])) 70 { 71 xmlElementCollect[xmlDocCollect[i]].Add(xmlDocCollect[i + 1]); 72 } 73 else 74 { 75 xmlElementCollect.Add(xmlDocCollect[i], new List<string>() { xmlDocCollect[i + 1] }); 76 } 77 i = i + 1; 78 } 79 return xmlElementCollect; 80 }
记录一下,省的找不到