2014-01-20 5 views
3

Jsoup 파서에 어려움이 있습니다. 주어진 문자열이 유효한 HTML 코드인지 어떻게 알 수 있습니까? Jsoup 먼저 HtmlTreeBuilder 사용하므로Jsoup 문자열이 올바른지 확인하십시오.

String input = "Your vote was successfully added." 
boolean isValid = Jsoup.isValid(input); 
// isValid = true 

isValid 플래그는 사실이다 : HTML, 머리 또는 신체의 ONY 태그가없는 경우는 그 자체를 추가한다. 그런 다음 Cleaner 클래스를 사용하고 주어진 화이트리스트에 대해 체크합니다.

string이 유효한 HTML인지 확인하는 간단한 방법이 있습니까?

내 예제는 "text/html"콘텐츠 유형으로 제공되는 AJAX 응답입니다. 그런 다음 파서 (parser)로 간다. Jsoup는이 태그를 추가하므로 결과가 제대로 표시되지 않는다.

도움 주셔서 감사합니다. String을 확인

답변

5

우선 모두, 솔루션 제안 Reuben이 편집 한 것은 예상대로 작동하지 않습니다. 패턴은 Pattern.DOTALL 플래그로 컴파일해야합니다.

Pattern htmlPattern = Pattern.compile(".*\\<[^>]+>.*", Pattern.DOTALL); 
boolean isHTML = htmlPattern.matcher(input).matches(); 

내가이 패턴은 HTML 태그뿐만 아니라 발견해야한다고 생각 : 입력 HTML은 그래서 이런 식으로 뭔가해야한다 (아마 의지와) 등

새로운 라인 징후가있을 수 있습니다. 다음 : 유일한 유효한 옵션이 아닙니다. 또한 속성 즉, 이것은 또한 처리되어야합니다.

나는 Jsoup 소스를 수정하기로 결정했습니다. HTMLTreeBuilder (실제로 상태 BeforeHtml)가 <html> 요소를 추가하려고하면 ParseException이 발생하고 입력 파일이 유효한 HTML 파일이 아닌 것으로 확신합니다.

2

사용 정규식은 StringHTML 값이 있으면 HTML 여부

boolean isHTML = input.matches(".*\\<[^>]+>.*"); 

다음은 true

String input = "<html><body></body></html>" ; 

를 반환하지만이 코드 String input = "Hello World <>";가 반환됩니다 포함 false

+1

좋아,이 방법으로 구현하겠습니다. 왜 두 개의 백 슬래시를 여기에 넣었는지 말해 줄 수 있겠습니까? "\\ <"? 정규식의 – user464592

+0

\\은 단일 백 슬래시와 일치합니다. 이 질문에 대한 답변이 있으면 대답으로 받아 들일 수 있습니다. – Reuben

+1

예, 물론입니다. 나는 받아 들였다. 나는 아직도이 패턴에서 \가 필요한 이유를 모르겠다. 설명 : 모든 사인, \, <, 사인 한 번 이상> 한 번 이상,>, 모든 사인. 왜 백 슬래시? :) – user464592

관련 문제