2012-07-26 21 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);