简体   繁体   English

使用foreach读取XDocument同名元素

[英]Read XDocument same name elements using foreach

I have an XML file: 我有一个XML文件:

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

Idea is put all values of text elements into List if "type" attribute is correct. 如果“类型”属性正确,则将文本元素的所有值放入“列表”中。 My code is: 我的代码是:

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;
    }
}

Part with attribute is working, but read several elements wits same name is tricky for me. 具有属性的部分可以正常工作,但是读取多个具有相同名称的元素对我来说很棘手。

You need another foreach : 您需要另一个foreach

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

Or to make it more clear: 或者更明确地说:

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

This variant of code works well for my task: 这种代码变体可以很好地完成我的任务:

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;
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM