2016-09-24 74 views
0

使用Jsoup,克隆的元素没有拥有者Document,这使得我无法设置这些元素的输出设置,并导致我的应用程序出现一些问题。试试这个:在Jsoup中设置克隆元素的输出设置

package test; 

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 

public class Main { 
    public static void main(String[] args) { 
     Document doc = Jsoup.parse("<div></div>"); 
     doc.outputSettings(new Document.OutputSettings().prettyPrint(false)); 
     Element e = doc.body(); 
     Element copy = e.clone(); 
     System.out.println(e.outerHtml());//returns html not pretty printed 
     System.out.println(copy.outerHtml());//returns html pretty printed 
     System.out.println(copy.ownerDocument());//returns null 
    } 
} 

问题是,对于内联元素,这有所不同。举例来说,如果我得到

<body> 
<div style="display:inline;"> 
    test 
</div> 
<div style="display:inline;"> 
    test 
</div> 
</body> 

,而不是

<div style="display:inline-block;">test</div><div style="display:inline-block;">test</div> 

我得到额外的空间,这是错误的。

回答

0

我认为我得到了诀窍:

Element elt = Jsoup.parse(elementToBeCloned).body().child(0); 
    elt.ownedDocument().outputSettings(elementToBeCloned.ownedDocument().outputSettings().clone()); 

的想法是做一个新的解析生成一个新文件,然后克隆OutputSettings。不知道为什么我没有考虑它。