HTML의 장점이자 단점은 바로 융통성이다. 융통성 있는 구조를 가지다 보니, 대충(?) 만들어도 브라우저같은곳에서 잘 보여준다.
그런데... 문제는...
프로그래밍해서 html을 분석하기에는 참 난해한것이다.
규격에 안맞다보니, 섬세하게(?) 제어할려고 하면 꽥~~하는 습성이 있는것이다.
뭐 일일이 수작업(?)으로 분석할 수는 있지만, 그건 너무 잔혹하지 않는가.
이런 고민을 한방에 해결해 줄 라이브러리가 있으니,
그건 바로 Html Cleaner!!! (http://htmlcleaner.sourceforge.net/)
이름 그대로 깔끔한 성격이라서, 매우 마음에 든다.
대상 html을 마음껏 요리할 수 있는 자체 API도 제공하고, xml로 변환하여 처리할 수도 있다.
1. 사용하기.
- 아래처럼, HtmlCleaner 인스턴스를 생성하여 clean(대상) 메소드를 실행하면 된다.
- 반환되는 TagNode는 일반적인 DOM 방식의 Node 처럼 사용이 기능하다. (getElements...)
- Object[] evaluateXPath(String) 메소드를 이용하면 XPath형식으로 반환할 대상을 지정할 수 있다.
- 즉 아래처럼 html이 있을때,
"나는 누굴까?", "너는 누굴까?", "우리는 누굴까?"값만 가지고 오고 싶으면,
이런씩으로 구현하면 그 대상 node만 손쉽게 가져올 수 있다.
* 참고
2. 불필요한 요소 제거
-불필요한 요소를 제거 할려면, CleanerProperties 클래스의 setXXX() 메소드를 이용해서 설정해주면 된다.
3. XML로 만들어보기.
- XmlSerializer 를 이용하면 손쉽게 XML형식으로 출력 가능하다.
- DomSerializer 클래스를 이용해서, Document 객체로 변환도 가능하다.
* 참고
http://htmlcleaner.sourceforge.net/
http://htmlparser.sourceforge.net/
그런데... 문제는...
프로그래밍해서 html을 분석하기에는 참 난해한것이다.
규격에 안맞다보니, 섬세하게(?) 제어할려고 하면 꽥~~하는 습성이 있는것이다.
뭐 일일이 수작업(?)으로 분석할 수는 있지만, 그건 너무 잔혹하지 않는가.
이런 고민을 한방에 해결해 줄 라이브러리가 있으니,
그건 바로 Html Cleaner!!! (http://htmlcleaner.sourceforge.net/)
이름 그대로 깔끔한 성격이라서, 매우 마음에 든다.
대상 html을 마음껏 요리할 수 있는 자체 API도 제공하고, xml로 변환하여 처리할 수도 있다.
1. 사용하기.
- 아래처럼, HtmlCleaner 인스턴스를 생성하여 clean(대상) 메소드를 실행하면 된다.
HtmlCleaner cleaner = new HtmlCleaner(); TagNode node = cleaner.clean(...);
- 반환되는 TagNode는 일반적인 DOM 방식의 Node 처럼 사용이 기능하다. (getElements...)
- Object[] evaluateXPath(String) 메소드를 이용하면 XPath형식으로 반환할 대상을 지정할 수 있다.
- 즉 아래처럼 html이 있을때,
<table>
<tr>
<td><a href="http://blog.kangwoo.kr">나의 블로그</td>
<td align="left"><div>나는 누굴까?</div></td>
</tr>
<tr>
<td><a href="http://blog.kangwoo.kr">너의 블로그</td>
<td align="left"><div>너는 누굴까?</div></td>
</tr>
<tr>
<td><a href="http://blog.kangwoo.kr">우리의 블로그</td>
<td align="left"><div>우리는 누굴까?</div></td>
</tr>
</table>
"나는 누굴까?", "너는 누굴까?", "우리는 누굴까?"값만 가지고 오고 싶으면,
Object[] objArray = node.evaluateXPath("//table//tr//td[@align='left']//div");
for (Object obj: objArray) {
TagNode t = (TagNode)obj;
System.out.println(t.getText().toString());
}
이런씩으로 구현하면 그 대상 node만 손쉽게 가져올 수 있다.
* 참고
BaseToken
+ CommentToken
+ ContentToken
+ DoctypeToken
+ TagToken
+ EndTagToken
+ TagNode
2. 불필요한 요소 제거
-불필요한 요소를 제거 할려면, CleanerProperties 클래스의 setXXX() 메소드를 이용해서 설정해주면 된다.
HtmlCleaner cleaner = new HtmlCleaner(); CleanerProperties props = cleaner.getProperties(); props.setOmitComments(true); // 주석제거 TagNode node = cleaner.clean(...);
|
CleanerProperties: setAdvancedXmlEscape(boolean) |
3. XML로 만들어보기.
- XmlSerializer 를 이용하면 손쉽게 XML형식으로 출력 가능하다.
CleanerProperties props = cleaner.getProperties(); TagNode node = cleaner.clean(...); XmlSerializer xmlSerializer = new SimpleXmlSerializer(props); xmlSerializer.writeXmlToStream(node, System.out);
- DomSerializer 클래스를 이용해서, Document 객체로 변환도 가능하다.
new DomSerializer(props, true).createDOM(node);
* 참고
http://htmlcleaner.sourceforge.net/
http://htmlparser.sourceforge.net/