Advertisement
L_B

DynamicXml

L_B
Dec 4th, 2012
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.55 KB | None | 0 0
  1.     //See also http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with-dynamicobject.aspx
  2.  
  3.     public class DynamicXml : DynamicObject
  4.     {
  5.         XElement _root;
  6.         private DynamicXml(XElement root)
  7.         {
  8.             _root = root;
  9.         }
  10.  
  11.         public static DynamicXml Parse(string xmlString)
  12.         {
  13.             return new DynamicXml(XDocument.Parse(xmlString).Root);
  14.         }
  15.  
  16.         public static DynamicXml Load(string filename)
  17.         {
  18.             return new DynamicXml(XDocument.Load(filename).Root);
  19.         }
  20.  
  21.         public override bool TryGetMember(GetMemberBinder binder, out object result)
  22.         {
  23.             result = null;
  24.                                
  25.             var att = _root.Attribute(binder.Name);
  26.             if (att != null)
  27.             {
  28.                 result = att.Value;
  29.                 return true;
  30.             }
  31.  
  32.             var nodes = _root.Elements(binder.Name);
  33.             if (nodes.Count() > 1)
  34.             {
  35.                 result = nodes.Select(n => new DynamicXml(n)).ToList();
  36.                 return true;
  37.             }
  38.  
  39.             var node = _root.Element(binder.Name);
  40.             if (node != null)
  41.             {
  42.                 if (node.HasElements)
  43.                 {
  44.                     result = new DynamicXml(node);
  45.                 }
  46.                 else
  47.                 {
  48.                     result = node.Value;
  49.                 }
  50.                 return true;
  51.             }
  52.  
  53.             return false ;
  54.         }
  55.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement