Jsoup:如何使用文件名中的空格提取img?

精神

我正在尝试使用Jsoup提取img。它对于文件名中没有任何空格的图像效果很好,但是如果存在空格,则仅提取第一部分。

我尝试了以下。

String result = Jsoup.clean(content,"https://rally1.rallydev.com/", Whitelist.relaxed().preserveRelativeLinks(true), new Document.OutputSettings().prettyPrint(false));
        Document doc = Jsoup.parse(result);
        Elements images = doc.select("img");

例如HTML内容

Description:<div>some text content<br /></div> 
<div><img src=/slm/attachment/43647556403/My file with space.png /></div>
<div><img src=/slm/attachment/43648152373/my_file_without_space.png/></div>

result 内容是:

Description:Some text content<br> <img src="/slm/attachment/43647556403/My"><img src="/slm/attachment/43648152373/my_file_without_space.png/">

在“结果”中,文件名中带有空格的图像只有第一部分“我的”。它忽略空格后的内容。

如果文件名包含空格,如何提取?

卢克施

在Jsoup中无法轻松解决该问题,因为src带有空格的示例属性值实际上被正确标识为only Myfilewith并且space.png部分是在这个例子中没有值也属性。当然,您可以使用JSoup将src属性后面的属性键连接到其值。例如这样:

String test =""
        + "<div><img src=/slm/attachment/43647556403/My file with space.png /></div>"
        + "<div><img src=/slm/attachment/43647556403/My file with space.png name=whatever/></div>"
        + "<div><img src=/slm/attachment/43647556403/This  breaks  it.png name=whatever/></div>"
        + "<div><img src=\"/slm/attachment/43647556403/This  works.png\" name=whatever/></div>"
        + "<div><img src=/slm/attachment/43648152373/my_file_without_space.png/></div>";
Document doc = Jsoup.parse(test);
Elements imgs = doc.select("img");
for (Element img : imgs){
    Attribute src = null;
    StringBuffer newSrcVal = new StringBuffer();
    List<String> toRemove = new ArrayList<>();
    for (Attribute a : img.attributes()){
        if (a.getKey().equals("src")){
            newSrcVal.append(a.getValue());
            src = a;
        }
        else if (newSrcVal.length()>0){
            //we already found the scr tag
            if (a.getValue().isEmpty()){
                newSrcVal.append(" ").append(a.getKey());
                toRemove.add(a.getKey());
            }
            else{
                //the empty attributes, i.e. file name parts are over
                break;
            }
        }               
    }
    for (String toRemAttr : toRemove){
        img.removeAttr(toRemAttr);
    }
    src.setValue(newSrcVal.toString());
}
System.out.println(doc);

该算法遍历所有img元素,并在每个img内遍历其属性。找到src属性后,将其保留以供参考,并开始填充newSrcBufStringBuffer。后面的所有无值属性都将添加到,newSrcBuf直到找到另一个具有值的属性或没有其他属性为止。最后,用的内容重置scr属性值,newSrcBuf并从DOM中删除以前的空属性。

请注意,当文件名包含两个或多个连续空格时,此功能将无效。JSoup会丢弃属性之间的那些空格,因此您无法在解析后将它们找回来。如果需要,则需要在解析之前操纵输入html。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从文件名中删除空格

来自分类Dev

使用awk提取带有空格的文件名

来自分类Dev

如何列出文件名中包含空格的文件?

来自分类Dev

如何删除文件名中包含空格的文件?

来自分类Dev

如何使用grep打开文件名中包含空格的文件?

来自分类Dev

如何处理文件名以bash中的空格开头?

来自分类Dev

如何检测文件名中是否存在空格?

来自分类Dev

如何批量处理文件名中的空格?

来自分类Dev

如何调用文件名中包含空格的程序?

来自分类Dev

如何让Lynx识别文件名中的空格

来自分类Dev

如何使用Powershell从文件名开头删除空格

来自分类Dev

如何使用空格分隔scp文件名?

来自分类Dev

在python中使用子进程时如何处理文件名中的空格

来自分类Dev

如何使用PowerShell删除文件名中的前导或尾随空格?

来自分类Dev

在python中使用子进程时如何处理文件名中的空格

来自分类Dev

ls文件名如何按数字顺序在文件名中包含空格字符

来自分类Dev

使用IFS处理文件名中的空格

来自分类Dev

使用IFS处理文件名中的空格

来自分类Dev

使用sed删除文件名中的空格和括号

来自分类Dev

文件名中的空格“破坏”文件名脚本

来自分类Dev

从文件名路径列表中仅提取maya文件中使用的纹理文件名

来自分类Dev

从文件名中包含空格的文件中提取xml标记值

来自分类Dev

img2pdf和文件名中的空格有问题

来自分类Dev

在Linux中,如何提取文件名不是Unicode的RAR?

来自分类Dev

如何不使用ant contrib从Ant中的文件名中提取版本?

来自分类Dev

nuget在文件名中编码空格

来自分类Dev

文件名中的空格python 3.4.2

来自分类Dev

处理文件名中的空格

来自分类Dev

从包含<img>标记的字符串中仅提取文件名

Related 相关文章

  1. 1

    如何从文件名中删除空格

  2. 2

    使用awk提取带有空格的文件名

  3. 3

    如何列出文件名中包含空格的文件?

  4. 4

    如何删除文件名中包含空格的文件?

  5. 5

    如何使用grep打开文件名中包含空格的文件?

  6. 6

    如何处理文件名以bash中的空格开头?

  7. 7

    如何检测文件名中是否存在空格?

  8. 8

    如何批量处理文件名中的空格?

  9. 9

    如何调用文件名中包含空格的程序?

  10. 10

    如何让Lynx识别文件名中的空格

  11. 11

    如何使用Powershell从文件名开头删除空格

  12. 12

    如何使用空格分隔scp文件名?

  13. 13

    在python中使用子进程时如何处理文件名中的空格

  14. 14

    如何使用PowerShell删除文件名中的前导或尾随空格?

  15. 15

    在python中使用子进程时如何处理文件名中的空格

  16. 16

    ls文件名如何按数字顺序在文件名中包含空格字符

  17. 17

    使用IFS处理文件名中的空格

  18. 18

    使用IFS处理文件名中的空格

  19. 19

    使用sed删除文件名中的空格和括号

  20. 20

    文件名中的空格“破坏”文件名脚本

  21. 21

    从文件名路径列表中仅提取maya文件中使用的纹理文件名

  22. 22

    从文件名中包含空格的文件中提取xml标记值

  23. 23

    img2pdf和文件名中的空格有问题

  24. 24

    在Linux中,如何提取文件名不是Unicode的RAR?

  25. 25

    如何不使用ant contrib从Ant中的文件名中提取版本?

  26. 26

    nuget在文件名中编码空格

  27. 27

    文件名中的空格python 3.4.2

  28. 28

    处理文件名中的空格

  29. 29

    从包含<img>标记的字符串中仅提取文件名

热门标签

归档