2014-05-19 2 views
1

ColdFusion에서 HtmlCleaner를 사용하고 있습니다. 아래의 코드에서 노드 트리를 가로 지르고 내용 노드를 찾습니다. 내가하고 싶은 것은 노드의 텍스트 내용을 수정할 수 있어야한다는 것입니다.HtmlCleaner ContentNodes 사용 및 텍스트 내용 수정

node.traverse(new TagNodeVisitor() { 
    public boolean visit(TagNode tagNode, HtmlNode htmlNode) { 
     if (htmlNode instanceof ContentNode) { 
      ContentNode content = ((ContentNode) htmlNode); 
      String textContent = content.getContent(); 
     } 
     // tells visitor to continue traversing the DOM tree 
     return true; 
    } 
}); 

내가 사용 예는 다음과 같습니다

// traverse whole DOM and update images to absolute URLs 
node.traverse(new TagNodeVisitor() { 
    public boolean visit(TagNode tagNode, HtmlNode htmlNode) { 
     if (htmlNode instanceof TagNode) { 
      TagNode tag = (TagNode) htmlNode; 
      String tagName = tag.getName(); 
      if ("img".equals(tagName)) { 
       String src = tag.getAttributeByName("src"); 
       if (src != null) { 
        tag.setAttribute("src", Utils.fullUrl(siteUrl, src)); 
       } 
      } 
     } else if (htmlNode instanceof CommentNode) { 
      CommentNode comment = ((CommentNode) htmlNode); 
      comment.getContent().append(" -- By HtmlCleaner"); 
     } 
     // tells visitor to continue traversing the DOM tree 
     return true; 
    } 
}); 

답변

0

내가하고 싶었던 무슨 사이의 내용을 잡아이었다 html 태그를 사용하면 내가 할 수 있습니다. ... 요법 html 태그, 이미지, 덤비는하지 않고, 다른 언어로

node.traverse(new TagNodeVisitor() { 
    public boolean visit(TagNode tagNode, HtmlNode htmlNode) { 
    if (htmlNode instanceof ContentNode) { 
      ContentNode content = ((ContentNode) htmlNode); 
      URLConnection urlConn; 
      StringBuilder result = new StringBuilder(); 
      String USER_AGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"; 
      String text = content.getContent(); 
      String strUrl = "http://translate.google.com/translate_a/t?client=t&sl=#arguments.FromLanguage#&tl=#arguments.ToLanguage#&hl=#arguments.ToLanguage#&sc=2&ie=UTF-8&oe=UTF-8&oc=1&otf=1&ssel=0&tsel=0&q=" + URLEncoder.encode(text); 
      URL url = new URL(strUrl); 
      urlConn = url.openConnection(); 
      urlConn.addRequestProperty("User-Agent", 
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 
      Reader reader = new InputStreamReader(urlConn.getInputStream(), 
          "utf-8"); 

      JsonArray gRet = new Gson().fromJson(reader, JsonArray.class); 
      StringBuffer newContent = new StringBuffer(1000); 
      gRet.get(0)?.each() { el -> newContent.append(el.getAsJsonArray()?.get(0)?.getAsString()); }; 

      tagNode.insertChildAfter(htmlNode, new ContentNode(newContent.toString())); 
      tagNode.removeChild(htmlNode); 

     } 
    } 
}); 
0

내가 HtmlCleaner에 익숙하지 않은 해요, 그것은 단지 "청소"를 수행합니까? 텍스트 값을 설정하는 방법을 찾을 수 없습니다. http://htmlcleaner.sourceforge.net/doc/index.html

jsoup는 jQuery를 사용하는 것처럼 DOM 요소와 함께 작동하는 전체 HTML 파서 (자바로 작성)입니다. 텍스트 노드를 업데이트하기 위해 text() setter 메서드를 사용합니다. jsoup (및 ColdFusion)에 http://jsoup.org/cookbook/modifying-data/set-text

// intitial: <div></div> 
div = doc.select("div").first(); 
div.text("five > four"); 
div.prepend("First "); 
div.append(" Last"); 
// now: <div>First five &gt; four Last</div> 

상세 정보 :

+0

내가 jsoup의 알고 있지만, Htmlcleaner 사이트들이 주석 노드에 텍스트를 추가 할 경우 예를 준다 그들을 ranslate. comment.getContent(). append ("- By HtmlCleaner"); 하지만 그것을 시도하면 오류가 발생합니다. – jonesk

+0

@ user3653457 : 귀하의 질문 게시판에 꼭 있어야하는 정보입니다. –

+0

James는 모든 텍스트 노드를 가로 지르며 수정할 수있는 예제가 있습니다. 동적이어야하며 특정 태그를 찾고 있지 않습니다. – jonesk

관련 문제