//Try类型方法 //获取属性的值 public override bool TryGetMember(GetMemberBinder binder, out object result)//binder类似于this引用。动态的 { Console.WriteLine("获取成员"); XElement subElement = element.Element(binder.Name); if (subElement != null) { result = new DynamicXElement(subElement); return(true); } return(base.TryGetMember(binder, out result)); }
static void Main() { XDocument doc = XDocument.Load("books.xml"); dynamic root = DynamicXElement.CreateInstance(doc.Root); Console.WriteLine(root.book[2]["name"]); Console.WriteLine(root.book[1].author[1]); Console.WriteLine(root.book); Console.WriteLine("显示类的成员名:"); foreach (string item in root.GetDynamicMemberNames()) { Console.WriteLine(item); } Console.ReadKey(); }
public void AccessXMLByIndexTest() { var xml = XDocument.Parse( @"<School> <Classes> <Class> <Lecture>Expressions</Lecture> </Class> <Class> <Lecture>DynamicProgramming</Lecture> </Class> </Classes> <Professor> <Name>George</Name> <Lesson>Math</Lesson> </Professor> </School>"); dynamic dynamicXML = new DynamicXElement(xml.Element("School")); string res = dynamicXML["Classes", 0]["Class", 1]["Lecture", 0].Value; Assert.AreEqual("DynamicProgramming", res); }