2012-07-26 18 views
2

我正在爲windows phone的應用程序解析xml。 我的XML看起來像這樣:獲取XElements的名稱

<?xml version="1.0" encoding="utf-8" ?> 
<people> 
   <person name="Kurt Cobain"> 
    <overall> 
  
  </overall> 
  <childhood> 
  
  </childhood> 
  <youth> 
  
  </youth> 
  
     <picture1> 
  
  </picture1> 
   </person> 
  
</people> 

我應該得到的人節點(整體,童年,青年等)的元素的名字,因爲他們將是不同的每個人節點。 這是到目前爲止我的代碼,但查詢結果爲空:

XDocument loadedXml = XDocument.Load("people.xml"); 

                   var data = from query in loadedXml.Descendants("person") 
                              where ((query.Attribute("name").Value as string).Equals("Kurt Cobain")) 
                              select query.Elements(); 

                    
                    string test = ""; 
                    foreach (var item in data) 
                    { 
                        
                            test + = (item as XElement).Name.LocalName; 
                        
                    } 
                    MessageBox.Show(test); 

回答

2

從LINQ刪除.Elements()

var data = from query in loadedXml.Descendants("person") 
      where ((query.Attribute("name").Value as string).Equals("Kurt Cobain")) 
      select query; 
+0

但是我需要像總體,童年等人節點的名稱。 – 2012-07-26 13:35:27

+0

而foreach循環應該是這樣的:foreach(var item in data) { XElement el =(item as XElement); foreach(el.Elements()中的變量) {+}(= XElement).Name.LocalName; } } – 2012-07-26 13:50:26

2
var data = from item in loadedXml.Descendants("person") 
        where ((item.Attribute("name").Value as string).Equals("Kurt Cobain")) 
        select item; 

string test = ""; 
foreach (var item in data) 
    test += item.Attribute("name").Value; 
+0

你的回答也不錯,謝謝! – 2012-07-26 13:51:13

+0

不客氣! – laszlokiss88 2012-07-26 17:27:22

1

我看到你想在你的代碼的一部分使用的XElement,其他建議應該工作,但你也可以做到以下幾點:

XElement loadedXml = XElement.Load("people.xml"); 

    string test = ""; 

    foreach (var item in loadedXml.XPathSelectElements("person[@name='Kurt Cobain']")) 
    { 
    test += item.Attribute("name").Value; 
    } 

或者你可以做到這一點,像這樣(然而它很難閱讀)。

XElement loadedXml = XElement.Load("people.xml"); 

string test = loadedXml.XPathSelectElements("person[@name='Kurt Cobain']").Aggregate("", (current, item) => current + item.Attribute("name").Value);