Java 从所有元素中获取属性值

Java 从所有元素中获取属性值,java,jsoup,Java,Jsoup,代码: 输出: Document doc = Jsoup.connect("things.com").get(); Elements jpgs = doc.select("img[src$=.jpg]"); String links = jpgs.attr("src"); System.out.print("all: " + jpgs); System.out.print("src: " + links); 全部: src:apple.jpg J

代码:

输出:

    Document doc = Jsoup.connect("things.com").get();

    Elements jpgs = doc.select("img[src$=.jpg]");
    String links = jpgs.attr("src"); 

    System.out.print("all: " + jpgs);
    System.out.print("src: " + links);
全部:
src:apple.jpg
Jsoup给出了第一个元素的属性值。我怎样才能得到其他的(cat.jpg和boat.jpg)

谢谢。

元素#attr
将只返回第一个匹配项



解决方案 要获得所需的结果,应循环使用
元素

public String attr(String attributeKey) {
    for (Element element : this) {
        if (element.hasAttr(attributeKey))
             return element.attr(attributeKey);
        }
    return "";
}

您可以循环通过
链接
,并通过每个链接获取它,因为(注意
s
)显示:

从具有属性的第一个匹配元素中获取属性值

(我的重点。)

例如:

for (Element e : jpgs) {
    System.out.println(e.attr("src"));
}
使用Java 8,如果您愿意,您可能会得到它们的
列表

for (Element e : jpgs) {
    // use e.attr("src") here
}
List links=jpgs.stream()
.map(元素->元素属性(“src”))
.collect(Collectors.toList());
…但我的Java 8流fu非常弱,因此可能不太正确。是的,那是不对的。但这是总的想法

令人厌烦的老式方式是:

List<String> links = jpgs.stream<Element>()
                             .map(element -> element.attr("src"))
                             .collect(Collectors.toList());
List links=newarraylist(links.size());
用于(元素e:jpgs){
srcs.add(e.attr(“src”));
}

谢谢你,克劳德
List<String> links = jpgs.stream<Element>()
                             .map(element -> element.attr("src"))
                             .collect(Collectors.toList());
List<String> links = new ArrayList<String>(links.size());
for (Element e : jpgs) {
    srcs.add(e.attr("src"));
}