我相信这相对简单。我想遍历下面的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>
答案 0 :(得分:1)
嗯,你忽略了你的外部迭代变量。我怀疑你只是想把你的内循环改为:
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,我当然觉得这样做更简单。