通过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>

通过xml循环,在每个循环中重置var

您忽略了外部迭代变量。我怀疑你只是想把你的内环改成:

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,我当然觉得它在这类事情上更简单。