使用foreach读取XDocument相同的名称元素

时间:2014-10-14 23:40:33

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

我有一个XML文件:

<encounter type="type1">
<strings>
    <text>Text1</text>
    <text>Text2</text>
    <text>Text3</text>
</strings>
</encounter>

如果&#34;键入&#34>,则将所有文本元素值放入列表中。属性是正确的。我的代码是:

foreach (XElement el in xDoc.Root.Elements())
{
    if(el.Attribute("type").Value == choice)
    {
        List<string> textStrings = new List<string>();

        foreach (XElement elStr in el.Element("strings")) {
            textStrings.Add(elStr.Element("text").Value);
        }
        break;
    }
}

具有属性的部分正在运行,但是阅读几个相同名称的元素对我来说很棘手。

2 个答案:

答案 0 :(得分:1)

您需要另一个foreach

    foreach (XElement elStr in el.Element("strings")) {
        foreach(XElement elText in elStr.Elements("text")) {
            textStrings.Add((string)elText);
        }
    }

或者说得更清楚:

List<string> textStrings = xDoc.Root
                               .Elements()
                               .First(x => (string)x.Attribute("type") == choice)
                               .Element("strings")
                               .Elements("text").
                               .Select(t => (string)t)
                               .ToList();

答案 1 :(得分:0)

这种代码变体适用于我的任务:

foreach (XElement el in xDoc.Root.Elements())
    {
        if(el.Attribute("type").Value == choice)
        {
            XElement elStr = el.Element("strings");                
            foreach (XElement elText in elStr.Elements("text"))
            {
                textStrings.Add((string)elText);
            }      
            break;
        }
    }