Linq到Xml,是否有可能改进此查询?

时间:2011-03-24 21:18:13

标签: c# xml linq linq-to-xml

我正在尝试学习LINQ to XML。我无法正确编写查询。我应该写什么来检索索引MCCO的代码列表?

<Indexes>
    <Index Name="ARTP">
        <Codes>
            <Code>aaa</Code>
            <Code>bbb</Code>
        </Codes>
    </Index>
    <Index Name="MCCO">
        <Codes>
            <Code>ccc</Code>
            <Code>ddd</Code>
        </Codes>
    </Index>
    <Index Name="AWAY">
        <Value>eee</Value>
    </Index>
</Indexes>

我已经写了这个,但我觉得有一种方法可以改善查询。我假设我的节点中有代码(而不是值)。

    private List<string> GetCodes(string name)
    {
        var indexes = from index in indexXmlDocument.Descendants("Index")
                      where index.Attribute("Name").Value == name
                      select new 
                      {
                          Codes = index.Element("Codes").Elements("Code")
                      };
        List<string> codes = new List<string>();
        foreach (var code in indexes.Single().Codes)
        {
            codes.Add(code.Value);
        }
        return codes;
    }

1 个答案:

答案 0 :(得分:5)

private IEnumerable<string> GetCodes(string name)
{
    return indexXmlDocument.Descendants("Index")
        .Where(e => e.Attribute("Name").Value == name)
        .Descendants("Code")
        .Select(e => e.Value);
}