循环遍历每个循环上的xml重置var

时间:2012-01-18 10:57:37

标签: c# xml xpath

我相信这相对简单。我想遍历下面的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>

1 个答案:

答案 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,我当然觉得这样做更简单。