包装元素不会包装它们,没有显示异常

时间:2019-03-17 17:04:48

标签: jsoup

我想包装JSouped文档的每个Element。这些Elements是根据属性color的值中是否存在单词style来定义的。

文档为:<body><span style="color: rgb(37, 163, 73);">Test</span></body>

所以我写了:

Document jsoup_document_caption = Jsoup.parse("<body><span style=\"color: rgb(37, 163, 73);\">Test</span></body>");
Elements elements = jsoup_document_caption.getElementsByAttributeValueContaining("style", "color");
Elements jsouped_elements = elements.wrap("<div></div>");
String jsouped_caption = jsouped_elements.outerHtml();

最后三行中的每一行在打印时显示:<span style="color: rgb(37, 163, 73);">Test</span>

特别考虑System.out.println(jsouped_caption),我们可以看到它没有被包装。你知道为什么吗?我已经仔细阅读了文档,但没有找到答案:https://jsoup.org/apidocs/org/jsoup/select/Elements.html + https://jsoup.org/cookbook/


编辑:

如果我用Element对待Element也是一样:

    Elements elements = jsoup_document_caption.getElementsByAttributeValueContaining("style", "color");
    for(Element element : elements) {
        System.out.println("Found element:");
        System.out.println(element);
        Element jsouped_element = element.wrap("<div></div>");
        System.out.println("JSouped:");
        String jsouped_caption = jsouped_element.outerHtml();
        System.out.println(jsouped_caption);
    }

1 个答案:

答案 0 :(得分:2)

wrap元素之后,自动换行位于元素本身之外-成为其父元素,因此您可以执行以下操作:

Document jsoup_document_caption = Jsoup.parse("<body><span style=\"color: rgb(37, 163, 73);\">Test</span></body>");
Elements elements = jsoup_document_caption.getElementsByAttributeValueContaining("style", "color");
System.out.println(elements); //outputs your original selection -<span style="color: rgb(37, 163, 73);">Test</span>
elements.wrap("<div/></div>");
System.out.println(elements); //still the same output - elements is unchanged
Element wrapped = elements.parents().first(); //now you have the original element AND the wrap
System.out.println(wrapped);    

上次打印的输出为<div> <span style="color: rgb(37, 163, 73);">Test</span> </div>