2017-12-29 12 views
1

다음 코드가 있습니다. doc.body.text() 문은 스타일 및 스크립트 태그 내의 텍스트를 출력하지 않습니다. .text() 함수 코드를 읽고 TextNode의 모든 인스턴스를 찾습니다. Jsoup의 TextNode 란 무엇입니까?Java Jsoup : 모든 텍스트를 추출하십시오.

그리고 왜 스크립트 텍스트는 .text() 출력에 포함되지 않습니다.

String contex = "<html><body><style>style</style><div>div</div><script>script</script><p>paragraph</p>body</body></html>"; 
    Document doc = Jsoup.parse(contex, "UTF-8"); 
    String text = doc.body().text(); 
    System.out.println("Test text : " + text); 

출력 : paragraphbody

답변

1

<script> 같은 태그를 구문 분석 org.jsoup.select.Elements를 사용하기 위해 필요한이 들어.

String contex = "<html><body><style>style</style><div>div</div><script>scripts</script><p>paragraph</p><p>body</p><script>787878</script></body></html>"; 
     Document doc =Jsoup.parse(contex, "UTF-8"); 
     Elements scriptElements = doc.getElementsByTag("script"); 

     for (Element el :scriptElements){     
       for (DataNode dn : el.dataNodes()) { 
        System.out.println(dn.getWholeData()); 
       } 
      } 

OP :

scripts 
787878 
+0

모든 요소() 함수 덮개는 .text 무엇? 요소별로, div, p, h 등을 의미합니다. – user8788828

+0

@ user8788828'style','script' 및'CData'를 제외한 모두. – gurvinder372

1

그리고 스크립트 텍스트는는 .text() 출력에 포함되지 않는 이유. scriptstyle데이터있다

때문에 아닌 텍스트.

script의 데이터에서 데이터를 얻을 style를 들어, source code 당으로 getWholeData

for (Element element :scriptElements){     
    for (DataNode node : element.dataNodes()) { 
     System.out.println(node.getWholeData()); 
    } 
    System.out.println("-------------------");    
} 

에 의해 getElementsByTag

Elements scriptElements = doc.getElementsByTag("script"); 

및 액세스를 사용하거나 script 태그 데이터 노드 대신으로 처리하려면 텍스트 노드

,
void insert(Token.Character characterToken) { 
     Node node; 
     // characters in script and style go in as datanodes, not text nodes 
     final String tagName = currentElement().tagName(); 
     final String data = characterToken.getData(); 

     if (characterToken.isCData()) 
      node = new CDataNode(data); 
     else if (tagName.equals("script") || tagName.equals("style")) 
      node = new DataNode(data); 
     else 
      node = new TextNode(data); 
     currentElement().appendChild(node); // doesn't use insertNode, because we don't foster these; and will always have a 
    stack. 
    } 
관련 문제