【问题标题】:Get names of XElements获取 XElement 的名称
【发布时间】:2012-07-26 13:14:17
【问题描述】:

我正在为 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);

【问题讨论】:

    标签: c# xml windows-phone-7 xelement


    【解决方案1】:

    从您的 linq 中删除 .Elements()

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

    【讨论】:

    • 而foreach循环应该是这样的: foreach (var item in data) { XElement el = (item as XElement); foreach(var t in el.Elements()) { test += (t as XElement).Name.LocalName; } }
    【解决方案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;
    

    【讨论】:

      【解决方案3】:

      我看到您尝试在代码的一部分中使用 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        相关资源
        最近更新 更多