使用动态特性读取 XML 结构

Posted

技术标签:

【中文标题】使用动态特性读取 XML 结构【英文标题】:Reading XML structure using dynamic features 【发布时间】:2014-11-08 01:16:28 【问题描述】:

假设我有一个 XML 文件,它被加载到 XElement 或类似的东西中。获取标签值的一种方法是使用Element() 方法。

有没有办法使用动态对象来促进这一点。比如我想替换

var val = xelement.Element("Name").Value

var dyn = (dynamic)xelement;
var val = dyn.Name;

拥有嵌套属性也是一个好主意。例如:

var val = dyn.Person.Name;

甚至更好:

var val = dyn.Children.Where(c=>c.Name == "Mehran").FirstOrDefault().Age;

【问题讨论】:

【参考方案1】:

我相信我已经以博客文章的形式回答了你的问题,你可以在http://blog.waseem-sabjee.com/2014/09/14/how-to-convert-an-xml-document-to-a-dynamic-object-in-net/阅读这篇文章

博文还包含一个有效解决方案的下载链接。

这里有一些实现代码供您查看: (注意 ToDynamicList 方法是一个扩展方法,它的代码可以在我的博客上找到。)

            XElement doc = XElement.Load(reader);

            // using our ToDynamicList (Extenion Method)
            var people = doc.ToDynamicList();

            // loop through each person
            foreach (dynamic person in people.Where(X => X.Name == "Waseem"))
            
                Console.WriteLine("id:\t" + person.Id);
                Console.WriteLine("Name:\t" + person.Name);
                Console.WriteLine("Age:\t" + person.Age);
                Console.WriteLine("----------------------------------");
                try
                
                    // loop through children, if any
                    foreach(dynamic child in person.Children)
                    
                        Console.WriteLine("\tid:\t" + child.Id);
                        Console.WriteLine("\tName:\t" + child.Name);
                        Console.WriteLine("\tAge:\t" + child.Age);
                    
                    Console.WriteLine("----------------------------------");
                
                catch(Exception ex)
                
                
            

        

【讨论】:

以上是关于使用动态特性读取 XML 结构的主要内容,如果未能解决你的问题,请参考以下文章

如何用python读取xml文件

JS动态加载JSON文件并读取数据

JS动态加载JSON文件并读取数据

JS动态加载JSON文件并读取数据

c#中怎样读取xml文件中的数据,怎样动态将数据存储到xml文件中去?

Qt读取XML结构