2

我正在为 windows phone 的应用程序解析 xml。我的 XML 看起来像这样:

<?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);
4

3 回答 3

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;
于 2012-07-26T13:22:09.953 回答
2

.Elements()从您的 linq 中删除。

var data = from query in loadedXml.Descendants("person") 
           where ((query.Attribute("name").Value as string).Equals("Kurt Cobain")) 
           select query;
于 2012-07-26T13:22:39.517 回答
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);
于 2012-07-26T14:04:33.197 回答