Jsoup:如何获取具有属性的元素等于另一个元素属性

时间:2013-06-18 18:36:08

标签: jsoup

更准确地说,我需要提取页面的所有图像映射
良好形成的图像映射定义如下:

<img src="image.gif" width="145" height="126" alt="My Image" usemap="#mymap">

<map name="mymap">
    <area shape="rect" coords="0,0,82,126" href="page1.htm" alt="Area1">
    <area shape="circle" coords="90,58,3" href="page2.htm" alt="Area2">
    <area shape="circle" coords="124,58,8" href="page3.htm" alt="Area3">
</map> 

<map>元素所需的“name”属性与<img>的“usemap”属性相关联,并在图像和地图之间创建关系。

如何保持格式正确的<map>,从而跳过所有“name”属性与任何<img>的任何“usemap”属性不对应的属性?

是否可以避免选择具有“usemap”属性的所有<img>元素和具有“name”属性的所有<map>元素并逐个进行比较?

在这种情况下,xpath可以执行类似

的操作
 //map[concat('#', @name) = //img/@usemap]"

有没有相应的?

提前致谢

问候

KOJ

1 个答案:

答案 0 :(得分:0)

这应该

Document doc = Jsoup.parse(input, "UTF-8");
    Elements mapElements = doc.select("map");
    for (Iterator<Element> map = mapElements.iterator(); map.hasNext();)
    {
        Element element = map.next();
        Elements imageElements = doc.getElementsByAttributeValue("usemap", "#" + element.attr("name"));
        if(imageElements.size() == 0){
                // No <img> corresponds to this <map>, do whatever you like
        }
    }