我想包装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);
}
答案 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>