xml 파싱을 위해서 그 동안 SAX, DOM 등으로 element 를 한땀 한땀 찾아 내던걸 H/W 가 좋아지다 보니
이제 xpath로 쉽게 파싱을 할수 있는데 android 에서도 마찬가지로 xpath가 포함되어 있어 간단하게 나마 소개를 해보도록 한다.
먼저 파싱할 내용은 xml 이 아닌 html 이지만 어차피 동일한 구조? 이므로 html 을 쉽게 파싱하고자.. xpath 를 선택 했다.
XPATH 에 레퍼런스는 하단에 url을 참조 하면 되고..
http://developer.android.com/reference/javax/xml/xpath/package-summary.html
파싱할 데이터는 다음과 같다.. 이를 파싱하는 소스를 보면
[code]
<li>
<div class="data_img">
<a href="./view/249">
<img src="/files/concert/1589.jpg" width="120" height="130"/>
</a>
</div>
<div class="data_title">
<a href="./view/249" class="font_title">
허니서클
</a>
</div>
<div class="data_date font_date">
공연일시 : 2011/03/04 19:30 ~ 21:00
</div>
<div class="data_content font_content">
허니서클은 스탠더드, 퓨전재즈, 컨템포러리 음악과 그루브 있는 사운드 연주로 유명한 팀입니다. 서울재즈 아카데미 강사진...
</div>
<div class="data_btn">
<a href="./view/249"><img src="/views/concert/images/list_data_btn.gif" alt="" width="121" height="20" /></a>
</div>
</li>
[/code]
실제 코드는 이렇다.
[code]
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
XPath xpath = XPathFactory.newInstance().newXPath();
concert = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + response.substring(ps, pe).trim();
//Log.d("@concert", concert);
//Log.d("imgURL", "================================================");
// html parsing
Document document = builder.parse(new ByteArrayInputStream(concert.getBytes()));
expression = "//div [@class='data_img']/a/img/@src";
image = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
Log.d("imgURL", image);
expression = "//div [@class='data_title']/a/text()";
xmlData[0] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
expression = "//div [@class='data_date font_date']/text()";
xmlData[1] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
expression = "//div [@class='data_content font_content']/text()";
xmlData[2] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
expression = "//div [@class='data_btn']/a/img/@src";
xmlData[3] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
[/code]
XPATH에 패턴을 설명 하자면 "/files/concert/1589.jpg" 에 정보를 얻기 위해서는 다음과 같이 패턴을 입력해 값을 얻을 수 있다.
[code]
"//div [@class='data_img']/a/img/@src"
[/code]
//div div 를 찾은 뒤
[@class='data_img'] class attribute 값이 data_img 인 녀석에
/a/img/ 하위 테그로 a 와 img 가 있고 Img 테그 내에
@src src attribute 에 값을 가져오는 것이다.
이제 xpath로 쉽게 파싱을 할수 있는데 android 에서도 마찬가지로 xpath가 포함되어 있어 간단하게 나마 소개를 해보도록 한다.
먼저 파싱할 내용은 xml 이 아닌 html 이지만 어차피 동일한 구조? 이므로 html 을 쉽게 파싱하고자.. xpath 를 선택 했다.
XPATH 에 레퍼런스는 하단에 url을 참조 하면 되고..
http://developer.android.com/reference/javax/xml/xpath/package-summary.html
파싱할 데이터는 다음과 같다.. 이를 파싱하는 소스를 보면
[code]
<li>
<div class="data_img">
<a href="./view/249">
<img src="/files/concert/1589.jpg" width="120" height="130"/>
</a>
</div>
<div class="data_title">
<a href="./view/249" class="font_title">
허니서클
</a>
</div>
<div class="data_date font_date">
공연일시 : 2011/03/04 19:30 ~ 21:00
</div>
<div class="data_content font_content">
허니서클은 스탠더드, 퓨전재즈, 컨템포러리 음악과 그루브 있는 사운드 연주로 유명한 팀입니다. 서울재즈 아카데미 강사진...
</div>
<div class="data_btn">
<a href="./view/249"><img src="/views/concert/images/list_data_btn.gif" alt="" width="121" height="20" /></a>
</div>
</li>
[/code]
실제 코드는 이렇다.
[code]
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
XPath xpath = XPathFactory.newInstance().newXPath();
concert = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + response.substring(ps, pe).trim();
//Log.d("@concert", concert);
//Log.d("imgURL", "================================================");
// html parsing
Document document = builder.parse(new ByteArrayInputStream(concert.getBytes()));
expression = "//div [@class='data_img']/a/img/@src";
image = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
Log.d("imgURL", image);
expression = "//div [@class='data_title']/a/text()";
xmlData[0] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
expression = "//div [@class='data_date font_date']/text()";
xmlData[1] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
expression = "//div [@class='data_content font_content']/text()";
xmlData[2] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
expression = "//div [@class='data_btn']/a/img/@src";
xmlData[3] = ((String) xpath.evaluate(expression, document, XPathConstants.STRING)).trim();
[/code]
XPATH에 패턴을 설명 하자면 "/files/concert/1589.jpg" 에 정보를 얻기 위해서는 다음과 같이 패턴을 입력해 값을 얻을 수 있다.
[code]
"//div [@class='data_img']/a/img/@src"
[/code]
//div div 를 찾은 뒤
[@class='data_img'] class attribute 값이 data_img 인 녀석에
/a/img/ 하위 테그로 a 와 img 가 있고 Img 테그 내에
@src src attribute 에 값을 가져오는 것이다.
'Android' 카테고리의 다른 글
time (0) | 2013.10.08 |
---|---|
webview ? (0) | 2013.10.08 |
String to InputStream (0) | 2013.10.08 |
How do I do a lazy load of images in ListView (DrawableManager) (0) | 2013.10.08 |
custom list view (0) | 2013.10.08 |