如何在Windows Phone 8.1中解析多个DESCENDANTS

时间:2014-10-31 12:44:08

标签: c# xml windows-phone-8.1

我正在尝试解析多个后代,但不知道如何解析。

请参阅我的XML文档:

<root>

  <withoutGroup>
    <Id>123</tabId>
    <Name>XYZ</tabName>
    <Url>ABC.htm</tabUrl>
    <Icon/>
  </withoutGroup>

 <group>

  <groupId>789</groupId>
  <groupName>TEST</groupName>

  <row>
    <Id>345</Id>
    <Name>PQR</Name>
    <Url>QWE.htm</Url>
    <Icon/>
  </row>
</group>

</root>
  1. 我想解析这些节点:

    编号

    名称

    地址

    图标

  2. 如何处理?

    XDocument doc = XDocument.Parse(e.Result);
    
    List<LIST> list = new List<LIST>();
    
    list = (from query in doc.Descendants("group")
           select new LIST
           {
              Id = Convert.ToInt64(query.Element("Id").Value),
              Name = query.Element("Name").Value
            }).ToList();
    

    e.Result是我的XML文档

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望从此特定情况下的各种父元素名称(rowwithoutGroup元素)中选择Id,Name,Url和Icon。这是一种可能的方式:

.......
//list all possible parent elements
var parentElements = new[] {"row", "withoutGroup"};
//get descendants having element name listed in parentElements variable
list = (from query in doc.Descendants()
                         .Where(o => parentElements.Contains(o.Name.LocalName))
        select new LIST
        {
          Id = (long)query.Element("Id"),
          Name = (string)query.Element("Name"),
          Url = (string)query.Element("Url"),
          Icon = (string)query.Element("Icon"),
        }).ToList();

顺便说一句,您可以将XElement直接投射到Operator部分中列出的某种类型,如上例所示。