2015-06-30 68 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路(在上述情況下 「實例」)

相關問題