在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循环之外的值。
答案 0 :(得分:0)
我假设您希望elementName包含具有“script”的元素的名称。在这种情况下,当您找到元素时,您需要停止循环。在您的if语句
if (!element.tagName().contains("script")) {
elementName = element.tagName();
break;
}
答案 1 :(得分:0)
由于String elementName
仅分配for循环中的最后一个值。如果您需要所有tagName
,请声明List<String> tagNames = new ArrayList<String>();
集合和
if (!element.tagName().contains("script")) {
tagNames.add(element.tagName());
}
这样,您就可以在列表中找到所有标记名称。