2012-12-18 2 views
1

html 페이지의 구조를 분석하고 싶습니다. 페이지의 경우 문자열로 사용하고 텍스트를 제거하고 html 구조 만 유지하려고합니다. DOM 파서를 사용하고 싶지 않고, xhtml뿐만 아니라 일반 html에서도 작동하는 강력한 기능이 필요합니다. 나는 정규 표현식이 html 태그를 스트링에서 제거하는 데 충분하지만 텍스트를 제거하고 html 태그 만 유지할 수 있는지 알고있다.자바에서 텍스트와 HTML 문자열을 제거하는 방법

사용할 수있는 다른 옵션/프레임 워크를 알고 계십니까?

+0

DOM 파서를 확실히 수행 할 것입니다 ... –

+0

이유는 내가 DOM 파싱을 피하고 싶었 기 때문에 그 결과 HTML을 DOM이 아닌 문자열로 사용하고 싶었 기 때문입니다. 그러나 DOM 파서를 사용하여 텍스트를 제거한 다음 문자열로 가져올 수 있습니다. 그것도 작동합니다, 나는 단지 내가 가지고있는 다른 옵션이 무엇인지 알고 싶습니다. – adiian

답변

0

사용할 수있는 다른 옵션/프레임 워크를 알고 계십니까?

JSoup을 볼 수 있습니다. 이런 유형의 문제를 정확하게 해결할 수 있도록 설계되었습니다.

2

나는 정규식을 사용하여 이것을 쉽게 할 수있는 방법이 없다고 생각한다.

Jericho은 별도의 외부 라이브러리가 없어도 작은 풋 프린트와 단일 병이있는 매우 정교한 HTML 파서입니다.

+0

나는 전에 Jericho를 사용 해왔고 구체적인 작업을 시도했지만 html 구조가 변경된 것은 아닙니다. 예를 들어 html 태그 텍스트에 액세스하려면 특수 TextExtractor 클래스가 필요합니다. 내부 html을 변경하는 메소드가 없기 때문에 각 노드의 텍스트를 제거하는 것이 어려워 보입니다. 제 목적을 위해 잘 갖추어 진 JSoup에 시도해보아야합니다. – adiian

0

이전에 태그를 제거했다면 기본 목표는 <과> 사이의 모든 항목을 제거하는 것입니다. >와 < 사이의 모든 것을 제거하는 것을 제외하면 텍스트를 제거하는 것은 매우 유사합니다. 그래서 예, 정규식은 텍스트를 제거하고 태그 만 남기는 데있어 매우 도움이됩니다. 또한 태그 속성을 처리하지 않으려는 경우 태그 속성을 제거하는 데 사용할 수도 있습니다.

0

괜찮은 시작을 줄 수 있습니다. 나는 HTML에 많은 경험이 없기 때문에 < 태그들 외에 문자열을 파싱 할 것이 있는지는 모르겠다. 의 라인을 따라

public static void main(String[] args){ 
    String html = "<body> text text text text </body>"; 
    String htmlTags = null; 
    char c; 
    for(int i = 0 ; i < html.length() ; i++){ 
     c = html.charAt(i); 
     if(tagStart(Character.toString(c))){ 
      for(int j = i ; j < html.length() ; j++){ 
       if(htmlTags != null){ 
        htmlTags += Character.toString(html.charAt(j)); 
       }else{ 
        htmlTags = Character.toString(html.charAt(j)); 
       } 
       c = html.charAt(j); 
       if(tagStop(Character.toString(c))){ 
        break; 
       } 
      } 
     } 
    } 
} 

private static boolean tagStart(String check){ 
    if(check.equals("<")){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

private static boolean tagStop(String check){ 
    if(check.equals(">")){ 
     return true; 
    }else{ 
     return false; 
    } 
} 
+0

다른 좋은 방법이 없다면 좋은 시작입니다. 내가 DOM이나 다른 파서/라이브러리를 시도 할 수있는 몇 가지가있다. 직접 파싱하기 전에는 정규 표현식을 사용하기도한다. 먼저 특정 태그에 포함 된 "텍스트"를

0

뭔가 :

pageSource.replaceAll(">.*<", "><"); 

당신이 시작할 수 있습니다.

관련 문제