2011-11-30 79 views
0

場景:LINQ到在C#中xml的

  1. 網格視圖被填充在WPF窗口。
  2. 在代碼後面有一個靜態列表(我想從一個xml文件中獲得)。

試圖靜態列表進入,我創建了以下格式毫升文件的XML file.For

<customers> 
<customer Name="abc"/> 
<customer Name="def"/> 
</customers> 

代碼隱藏:

Xdocument doc=Xdocument.load("customers.xml"); 
var customerList = (from e in doc.Descendants("Cusomters") 

          select new 
          { 
           CustomerName = e.Attribute("Name").Value 
          }).ToList(); 

我無法獲得客戶名稱從xml文件發送到customerList.I將不勝感激,如果有人可以幫助我前進。

回答

3

"Cusomters"拼寫錯誤,應該是"Customers"

顯然這不是你正在使用的代碼,因爲它甚至沒有編譯。它應該是這樣的:

XDocument doc = XDocument.Load("customers.xml"); 
var customerList = (from e in doc.Descendants("customer") 
     select new 
     { 
      CustomerName = e.Attribute("Name").Value 
     }).ToList(); 

你真的應該提到它不會編譯的事實。那,或者你用手抄錯了,這也幫不了你。

這裏的邏輯問題是您要求所有Customers標籤,請注意末尾的s。你真的想尋找Customer標籤,它有一個name屬性。 Customer*s*只是最高級別的組。

2

使用customer代替Cusomters(XML是區分大小寫):

from e in doc.Descendants("customer") 
+0

試過但沒有工作。 – Macnique

+0

@Macnique,更新。 –

2

您很可能希望List<string>,所以你並不需要投射到一個匿名類 - 也有一個錯字你查詢("Cusomters"):

var customerList = (from e in doc.Descendants("Customer") 
        select e.Attribute("Name").Value).ToList(); 

或擴展方法的語法:

var customerList = doc.Descendants("Customer") 
         .Select(e => e.Attribute("Name").Value) 
         .ToList(); 
0

伊夫總是習慣:

doc.root.elements("Customer") 

像這樣的小片段。

+0

-1後代工作如廣告(記錄)。更好地理解爲什麼你的代碼不工作而不是說「哦,這種方式因爲某種原因不起作用,我們只是用它來代替」。 –

+0

,這是值得-1 ...耶穌...你可能已經忽略了它,它仍然是一個可行的選擇。我與後代的問題不是其他人的問題,我只是做出了一個合格的評論......有些人... ... sheesh ...抓緊時間。 – shawty

+0

這不是個人的,我只是不認爲這是一個好的答案。你聲稱使用'.Descendants'不能可靠地工作,但你不解釋原因。這隻會讓初學者感到困惑。最重要的是,它展示了一種「巫術式」編碼風格,即「這不起作用,我們不知道爲什麼,只是這樣做」。這在代碼庫中從來都不是好事。 –