HTML 을 XML 파서로 파싱해서 객체화 시킬 일이 있어 여러 가지 실험해 보다가 쓸만한 팁을 정리합니다.
HTML 의 경우는 XML 과는 다르게 태그를 닫지 않거나 attribute 를 큰 따옴표로 감싸지 않아도 브라우저에서 확인이 가능합니다. 이렇기 때문에 HTML 을 XML 파서로 파싱하려면 큰 따옴표로 묶이지 않은 부분을 변경해 주어야 합니다.
(실제로 작업을 해보지는 않았으나 태그를 닫지 않는 것을 수정하려면 문서 전체를 문자열 단위로 파싱을 해야 가능할 것 같습니다.)
[TYPE_A]
...
</P>
[TYPE_B]
...
</P>
간단하게 이야기 하자면 [TYPE_A] 를 [TYPE_B] 로 변경하는 것이 목적입니다.
자바에서는 replaceAll 메소드와 정규식을 이용하면 쉽게 변환이 가능합니다.
1 |
String html = "..." ; |
2 |
3 |
String replaceHtml = html.replaceAll( "(class=)([^\\p{Space}\\>\\\"]+)" , "$1\"$2\"" ); |
우선 replaceAll 의 첫번째 파라미터를 설명하겠습니다.
'class='로 시작을 하고 스페이스, '>', 큰 따옴표가 나오기 전까지의 모든 문자들의 연속을 찾습니다. 괄호로 묶음은 그룹을 뜻하는데 여기서 그룹 1 은 'class=' 이며, 그룹 2 는 위의 [TYPE_A] 에서 라면 'PStyle0' 까지 입니다.
두번째 파라미터는 간단합니다. '$그룹번호' 로 변경하겠다는 이야기 입니다.
'$1\"$2\"' 을 단계별로 변환하면 그룹 1 이 교체되면 'class=\"$2\"' 가 되고 그룹 2 가 교체되면 'class=\"PStyle0\"' 이 됩니다.
출처 :http://vicki.tistory.com/851
정규식은 역시 활용만 잘하면 단순 노가다 작업을 간단하게 줄여줄 수 있는 강력한 무기가 됩니다.
'WEB' 카테고리의 다른 글
form submit 액세스가 거부되었습니다 에러 (1) | 2012.10.04 |
---|---|
자바스크립트 파일 업로드 이미지 미리보기 (1) | 2012.10.04 |
childnodes 문제 (0) | 2012.09.26 |
자바스크립트 split join (0) | 2012.09.22 |
setAttribute class 안먹을 때 (0) | 2012.09.22 |