C#動(dòng)態(tài)解析XML數(shù)據(jù)DynamicXml幫助類庫
DynamicXmlHelper運(yùn)用Dynamic特性將xml字符串自動(dòng)轉(zhuǎn)換為Dynamic Object實(shí)現(xiàn)動(dòng)態(tài)解析XML
DynamicXml 全稱為DynamicXmlHelper
中文簡稱:動(dòng)態(tài)Xml解析幫助類
適用版本:.NET Framework 4.0以上版本(包含.NET4.0)
核心技術(shù):運(yùn)用Dynamic特性將xml字符串自動(dòng)轉(zhuǎn)換為Dynamic Object實(shí)現(xiàn)動(dòng)態(tài)解析XML
DynamicXmlHelper源碼下載
using System; using System.Collections.Generic; using System.Linq; using System.Dynamic; using System.Xml.Linq; using System.Collections; public class DynamicXml : DynamicObject, IEnumerable { /* * DynamicXml 全稱為DynamicXmlHelper * 中文簡稱:動(dòng)態(tài)Xml解析幫助類 * 適用版本:.NET Framework 4.0以上版本(包含.NET4.0) * 核心技術(shù):運(yùn)用Dynamic特性將xml字符串自動(dòng)轉(zhuǎn)換為Dynamic Object實(shí)現(xiàn)動(dòng)態(tài)解析XML */ private readonly List<XElement> _elements; public DynamicXml(string text) { var doc = XDocument.Parse(text); _elements = new List<XElement> { doc.Root }; } protected DynamicXml(XElement element) { _elements = new List<XElement> { element }; } protected DynamicXml(IEnumerable<XElement> elements) { _elements = new List<XElement>(elements); } public override bool TryGetMember(GetMemberBinder binder, out object result) { result = null; if (binder.Name == "Value") result = _elements[0].Value; else if (binder.Name == "Count") result = _elements.Count; else { var attr = _elements[0].Attribute(XName.Get(binder.Name)); if (attr != null) result = attr; else { var items = _elements.Descendants(XName.Get(binder.Name)); if (items == null || items.Count() == 0) return false; result = new DynamicXml(items); } } return true; } public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { int ndx = (int)indexes[0]; result = new DynamicXml(_elements[ndx]); return true; } public IEnumerator GetEnumerator() { foreach (var element in _elements) yield return new DynamicXml(element); } }
原文鏈接:C#動(dòng)態(tài)解析XML數(shù)據(jù)DynamicXml幫助類