2017-05-03 170 views
0

我需要幫助。我試圖想出一個辦法來托架讀取裏面像這樣的:C#讀取特定節點內的xml

<group id = "56"> 
 
<name>Counter</name> 
 
</group>

在代碼中,存在相同的圖案回來mulitiple的地方,我想獲取所有組ID號碼和他們的名字。

這是我的代碼:

 XDocument doc = XDocument.Parse(_XmlFile); 
     var results = doc.Descendants("group").Select(x => new 
     { 
      id = (int)x.Attribute("id"), 
      name = x.Attribute("name").Value, 
     }).ToList(); 

     Console.WriteLine(results); 

感謝

+0

名稱不是一個屬性,但一個子節點 – flq

+0

1.你不能投'XElement'到'int'。你需要解析'Value',它是一個'string'。 2.'name'不是一個屬性,而是一個到'group'的子元素。 –

+0

有人可以幫我糾正這個嗎? –

回答

1

您的代碼看起來相當不錯,但name是一個元素,而不是屬性,因此它應該是

XDocument doc = XDocument.Parse(_XmlFile); 
var results = doc.Descendants("group").Select(x => new 
{ 
    id = (int)x.Attribute("id"), 
    name = (string)x.Element("name"), 
}).ToList(); 

foreach (var x in results) 
    Console.WriteLine("id: {0} name: {1}", x.id, x.name); 
+0

任何人都會煩惱解釋降價? – derpirscher

+0

這實際上是工作。 –

0

「名稱」不是一個屬性,而是一個子節點。解決的辦法是這樣的:

XDocument doc = XDocument.Parse(_XmlFile); 
var results = doc.Descendants("group").Select(x => new 
{ 
    id = int.Parse(x.Attribute("id").Value), 
    name = x.Descendants("name").First().Value 
}).ToList(); 
+0

您不需要'int.Parse'部分,但是您可以將'XAttribute'強制轉換爲'int','x.Element(「name」)'是獲取第一個子元素的更準確的方法一個XElement。此外,'x.Descendants'讓所有後代的孩子都能接受。也許這不是期望的。如果沒有後代'name',你的代碼會拋出異常 – derpirscher

+0

謝謝,你是對的。在發佈之前,我沒有看到您的答案... :) –