728x90

HTML 을 XML 파서로 파싱해서 객체화 시킬 일이 있어 여러 가지 실험해 보다가 쓸만한 팁을 정리합니다.

HTML 의 경우는 XML 과는 다르게 태그를 닫지 않거나 attribute 를 큰 따옴표로 감싸지 않아도 브라우저에서 확인이 가능합니다. 이렇기 때문에 HTML 을 XML 파서로 파싱하려면 큰 따옴표로 묶이지 않은 부분을 변경해 주어야 합니다.
(실제로 작업을 해보지는 않았으나 태그를 닫지 않는 것을 수정하려면 문서 전체를 문자열 단위로 파싱을 해야 가능할 것 같습니다.)

[TYPE_A]

<P class=PStyle0>
...
</P>


[TYPE_B]

<P class="PStyle0">
...
</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
정규식은 역시 활용만 잘하면 단순 노가다 작업을 간단하게 줄여줄 수 있는 강력한 무기가 됩니다.

728x90

+ Recent posts