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"));
}