我有一个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放在原来的,因为它很庞大并且有数以百万计的信息会让我们更加困惑。
谢谢:)
答案 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文件,因为如果你突破外部循环,一切都会停止。