Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //See also http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with-dynamicobject.aspx
- public class DynamicXml : DynamicObject
- {
- XElement _root;
- private DynamicXml(XElement root)
- {
- _root = root;
- }
- public static DynamicXml Parse(string xmlString)
- {
- return new DynamicXml(XDocument.Parse(xmlString).Root);
- }
- public static DynamicXml Load(string filename)
- {
- return new DynamicXml(XDocument.Load(filename).Root);
- }
- public override bool TryGetMember(GetMemberBinder binder, out object result)
- {
- result = null;
- var att = _root.Attribute(binder.Name);
- if (att != null)
- {
- result = att.Value;
- return true;
- }
- var nodes = _root.Elements(binder.Name);
- if (nodes.Count() > 1)
- {
- result = nodes.Select(n => new DynamicXml(n)).ToList();
- return true;
- }
- var node = _root.Element(binder.Name);
- if (node != null)
- {
- if (node.HasElements)
- {
- result = new DynamicXml(node);
- }
- else
- {
- result = node.Value;
- }
- return true;
- }
- return false ;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement