Xml解析,在另一个方法中继续foreach循环

时间:2013-11-05 14:30:35

标签: c# xml parsing loops foreach

我有一个XML文件,其组织方式类似于:

<People>
    <Person>
        <Name>John</Name>
        <SurName>Smith</SurName>
    </Person>
    <Person>
        <Name>Jack</Name>
        <SurName>Woodman</SurName>
    </Person>
    [...]
</People>
<Professions>
    <Person>
        <SurName>Smith</SurName>
        <Profession>Blacksmith</Profession>
    </Person>
    <Person>
        <SurName>Woodman</SurName>
        <Profession>Lumberjack</Profession>
    </Person>
        [...]
    </Professions>

好的,我们走了。 我正在使用Xml.Linq解析这个,我就像这段代码一样:

 foreach (XElement datatype in RepDoc.Element("People").Descendants("Persons"))
 {
     Name=datatype.Element("Name").Value;
     SurName=datatype.Element("SurName").Value;
 }

但问题是,是否有可能在另一个方法中打开另一个foreach,从当前datatype位置开始,而不再从头开始解析。 好像该方法继承了XElement datatype,因此我可以从同一个<Person>节点开始解析。

这听起来很愚蠢,但是我不能把原始的.xml放在原来的,因为它很庞大并且有数以百万计的信息会让我们更加困惑。

谢谢:)

1 个答案:

答案 0 :(得分:1)

好的,所以我相信你正在寻找yield。这通常会像这样使用:

public IEnumerable<Person> GetPeople()
{
    foreach (XElement datatype in RepDoc.Element("People").Descendants("Persons"))
    {
        var p = new Person
        {
            Name = datatype.Element("Name").Value,
            SurName = datatype.Element("SurName").Value
        };

        yield return p;
    }
}

然后您可以像这样使用该方法:

foreach (Person p in MyClass.GetPeople())

这里的好处是你只需要阅读尽可能多的XML文件,因为如果你突破外部循环,一切都会停止。