无法获取for循环之外的值

时间:2014-03-08 09:12:28

标签: java

在for循环中,我无法获得所有值,我只得到最后一个值,代码如下所示

public static void getHTMLElements(List<String> urls) throws IOException {

            getElements(urls);
            for (Map.Entry<String, HtmlElements> entry1 : urlList.entrySet()) {
                HtmlElements htmlele = entry1.getValue();
                System.out.println("url is " + entry1.getKey());
                System.out.println("Element Name is " + htmlele.getElementName());
                System.out.println("Attributes are " + htmlele.getAttributes());
            }

        }

        public static void getElements(List<String> urls) throws IOException {

            try {

                for (int i = 0; i < urls.size(); i++) {

                    String s = urls.get(i);

                    Document doc = Jsoup.connect(s).get();

                    getInputElements(doc, s);

                }
            }

            catch (Exception e) {
                e.printStackTrace();
            }

        }

        public static void getInputElements(Document doc, String urls) {
            // List l=new ArrayList();
            HtmlElements htmlElements = new HtmlElements();
            Properties attributes = new Properties();

            Elements elements = doc.getAllElements();
            for (Element element : elements) {
                if (!element.tagName().contains("script")) {
                    String elementName = element.tagName();
                    Attributes attr = element.attributes();
                    for (Attribute attr1 : attr) {

                        if (attr1.getKey().contains("id")) {
                            attributes.put(attr1.getKey(), attr1.getValue());

                        }
                        if (attr1.getKey().contains("name")) {
                            attributes.put(attr1.getKey(), attr1.getValue());
                        }
                        if (attr1.getKey().contains("type")) {
                            attributes.put(attr1.getKey(), attr1.getValue());
                        }
                    }
                    htmlElements.setElementName(elementName);
                    htmlElements.setAttributes(attributes);

                }
                urlList.put(urls, htmlElements);

            }
    }
    }

在上面的代码中,我试图从网站上获取所有元素url.But,elementName我无法正确获取。只能获取最后一个值。我想获取for循环之外的值。

2 个答案:

答案 0 :(得分:0)

我假设您希望elementName包含具有“script”的元素的名称。在这种情况下,当您找到元素时,您需要停止循环。在您的if语句 if (!element.tagName().contains("script")) { elementName = element.tagName(); break; }

中添加break

答案 1 :(得分:0)

由于String elementName仅分配for循环中的最后一个值。如果您需要所有tagName,请声明List<String> tagNames = new ArrayList<String>();集合和

 if (!element.tagName().contains("script")) {
    tagNames.add(element.tagName());
 }

这样,您就可以在列表中找到所有标记名称。