断开循环返回4结果而不是2

时间:2014-05-08 18:49:11

标签: java xml for-loop xml-parsing

我正在尝试解析XML文档。我正确地返回了所有结果,但是当我在嵌入式for循环中解析它们时,事情并没有完全正确。

我想要的是什么:

Var #1 
Var #2

我得到了什么:

Var #1
Var #2
Var #1
Var #2

我有一个初始for循环来遍历主文档并第一次获取所有变量,然后我有第二个for循环,它遍历文档的子元素。如上所述,for循环内的for循环返回所有正确的结果,但打印两次。

        NodeList nodes = doc.getElementsByTagName("update");

        for (int i=0; i < nodes.getLength(); i++)
        {
            Node node = nodes.item(i); 

            if (node.getNodeType() == Node.ELEMENT_NODE) 
            {

                if (update_type.equals("JGRP"))
                { 
                    String user = getValue("first-name", element) + " " + getValue("last-name", element);                                               
                    NodeList cNodes = doc.getElementsByTagName("member-group");

                    for (int z=0; z < cNodes.getLength(); z++)
                    { 
                        Node cNode = cNodes.item(z);

                        if (cNode.getNodeType() == Node.ELEMENT_NODE)
                        {   
                            Element cElement = (Element)cNode; 
                            String group_name = getValue("name",cElement);
                            g_name = group_name; 

                            System.out.println(g_name);
                        }
                    }                           
                }
            }
        }

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

我终于明白了。

    // This loop runs twice total
    for (int i=0; i < nodes.getLength(); i++)
    {
        ...

        if (node.getNodeType() == Node.ELEMENT_NODE) 
        {
            ...
            if (update_type.equals("JGRP"))
            { 
                ...
                // This loop runs twice total
                for (int z=0; z < cNodes.getLength(); z++)
                { 
                    ...

                    if (cNode.getNodeType() == Node.ELEMENT_NODE)
                    {   
                        ...

                        System.out.println(g_name);
                    }
                }                           
            }
        }
    }

如果您的外循环运行两次,则内循环运行的总次数为4次。因此它会打印4个元素,每个元素两次。