2015-06-30 67 views
0
public class xmlvalues 
{ 
    public int id { get; set; } 
    public string a { get; set; } 
    public string b { get; set; } 
    public string c { get; set; } 
} 

-- XML Example 
<instance> 
    <id>>1</id> 
    <a>value 1A</a> 
    <b>value 1B</b> 
    <c>value 1C</c> 
</instance> 


<instance> 
    <id>>2</id> 
    <a>value 2A</a> 
    <b>value 2B</b> 
    <c>value 2C</c> 
</instance> 

使用上面的例子可以为XML文件中的每个“实例”节点创建一个对象吗?在这个例子中,会有2个对象“xmlvalues”的实例,但理论上可能还有更多。是否有捷径可寻?是否可以从XML文件创建多个对象?

+1

使用列表 + XML序列化 –

+0

ü可以用一个简单的'loop'和'LINQ到XML'到d这个 – Sybren

回答

2

使用列表

using System.Xml.Linq; 

XDocument xdoc = XDocument.Load(@"...\path\document.xml"); 

List<xmlvalues> lists = (from lv1 in xdoc.Descendants("instance") 
         select new xmlvalues 
         { 
          id = lv1.Element("id"), 
          a= lv1.Element("a"), 
          b= lv1.Element("b"), 
          c= lv1.Element("c") 
         }).ToList(); 
+2

一个小修正:'lvl.Attribute'应该是'lvl.GetElement()'。否则,这个答案是胜利者。 –

+1

@MikeHofer Thanx,这将是lvl.GetElement()而不是lvl.Attribute –

+2

看到了这一点,并且已经更正了评论。 :)仍然给你了投票。 –

0

一种方式做到这一点,你就必须去适应你的XPath:

using System.Xml.XPath; 
using System.Xml.Linq; 

foreach (XElement el in xdoc.Root.XPathSelectElements ("instance")) { 
    //do something with el 
} 

这比.Descendants()更快,因为它没有检查所有的节点,在发现只是那些x路(在上述情况下 “实例”)

相关问题