通过xml循环,在每个循环中重置var
本文关键字:循环 var xml 通过 | 更新日期: 2023-09-27 18:20:33
我相信这相对简单。我想循环浏览下面的xml,每次我到达一个新的名称空间时,重置var.
XmlNodeList nodes = reports.SelectNodes("Reports/namespace");
foreach (XmlNode NSpace in nodes)
{
List<string> newlist = new List<string>();
//loop through checks one by one.
foreach (XmlElement element in reports.GetElementsByTagName("report"))
{
doStuff
}
}
我知道这是错误的,因为它只是在整个xml块中循环4次(对于每个命名空间),原因如下。
foreach (XmlElement element in reports.GetElementsByTagName("report"))
有人能建议我需要的xpath或正确的循环吗?
XML
<Reports>
<namespace Type="first">
<report>
<name>first_1</name>
</report>
<report>
<name>first_2</name>
</report>
<report>
<name>first_3</name>
</report>
</namespace>
<namespace Type="Second">
<report>
<name>Second_1</name>
</report>
</namespace>
<namespace Type="Third">
<report>
<name>Third_1</name>
</report>
</namespace>
<namespace Type="Fourth">
<report>
<name>Fourth_1</name>
</report>
</namespace>
</Reports>
您忽略了外部迭代变量。我怀疑你只是想把你的内环改成:
XmlElement namespaceElement = (XmlElement) NSpace;
foreach (XmlElement element in namespaceElement.GetElementsByTagName("report"))
{
// doStuff
}
或者,也可以更改迭代变量的类型:
foreach (XmlElement NSpace in nodes)
{
List<string> newlist = new List<string>();
foreach (XmlElement element in NSpace.GetElementsByTagName("report"))
{
// ...
}
}
(我也会更改迭代变量的名称,但那是另一回事。)
如果您使用的是.NET 3.5或更高版本,您可能还想考虑使用LINQ to XML,我当然觉得它在这类事情上更简单。