안드로이드 개발 질문/답변
(글 수 45,052)
웹에서 정보를 얻어오고있습니다.
웹 정보는
….
<script type="text/javascript" src="/js/glip0.js"></script>
<script type="text/javascript" src="/js/common.js"></script>
<script type="text/javascript" src="/js/csp0.js"></script>
<script type="text/javascript" src="/js/searchEngi.js"></script>
<script type="text/javascript">
function fOpenCnpDataPop(url, csmSeq, ccfNo, cciNo){
url += "?csmSeq=" + csmSeq
+ "&ccfNo=" + ccfNo
+ "&cciNo=" + cciNo;
popupScroll2(url, 'info',793, 643);
}
function cciChOn(cciId,cciLiId){
document.getElementById(cciId).className="on";
document.getElementById(cciLiId).className="me03";
}
…..
제가 웹에서 정보를 읽는 방법으로 두가지 방법을 사용하였는데요.
경우1.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web);
textview = (TextView)findViewById(R.id.text);
try {
URL url = new URL("http://oneclick.law.go.kr/CSP/CcfMain.laf?csmSeq=27&ccfNo=1&cciNo=1");
InputStream inputstream = url.openStream();
byte[] text = new byte[1000];
int readSize = inputstream.read(text);
Log.d("myTag","read size : " + readSize);
Log.d("myTag", "text : "+(new String(text)));
textview.setText(new String(text));
inputstream.close();
} catch (Exception e) {
Log.d("myTag",e.getMessage());
e.printStackTrace();
}
}
이 방법을 쓰는 경우
1. <script type="text/javascript">
2. function fOpenCnpDataPop(url, csmSeq, ccfNo, cciNo){
부분에서 1에서 2로 넘어갈때 xml이 END_DOCUMENT가 된 것으로 인식되어
그 뒤의 데이터를 읽어야하기때문에 사용을 하지 못하구요.
경우2.
URL url = new URL("http://oneclick.law.go.kr/CSP/CcfMain.laf?csmSeq=27&ccfNo=1&cciNo=1");
Log.d("myTag", "create URL");
// XmlPullParser 생성 가능한 XmlPullParserFactory 생성
XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
// 최근 생성된 XmlPullParserFactory의 특징을 갖는 XmlPullParser
XmlPullParser parser = parserCreator.newPullParser();
// URL로부터 받은 input stream을 perser에 넣음
parser.setInput(url.openStream(), null);
// parser 이벤트의 상태를 받아옴
// START_TAG, END_TAG, TEXT...
int parserEvent = parser.getEventType();
while (parserEvent != XmlPullParser.END_DOCUMENT){
// start case
if(parserEvent == XmlPullParser.START_TAG){ // Parser가 START_TAG
String tag = parser.getName(); // xml tag 받아옴
Log.d("myTag", tag);
if (tag.compareTo("<div class=\"sooyo_text\">") == 0){ // 생활분야 이름 tag 찾기
parserEvent = parser.next();
text = parser.getText(); // tag 내의 text 받아옴
//Log.d("myTag", list_num + " : receive life part name");
Log.d("myTag", "Success read Xml");
textview.setText(text);
break;
}
}
parserEvent = parser.next();
}
이런식으로 읽어오려고 시도를 하였는데,
<div class="sooyo_text"> 흔히 프랜차이즈사업이라 ......
용품, 등산용품, 학원 등의 분야로 계속 확대되고 있습니다.<br /><br /><br /></div>이부분을 따로 빼오기가 stringtoknizer를 사용하여도 빼오기가 난감하여 고생하고있습니다.
어떤 방법을 써야할까요?
2010.03.20 17:58:47
일단 HTML을 XML 파서로 분석해서는 안됩니다.
XML에 가장 가까운 HTML은 XHTML인데, XHTML조차도 well-form문서가 아닌이상 정확한 xml문서라고 취급될 수 없기 때문입니다.
HTML를 분석하는 파서를 따로 작성하시는것이 가장 좋습니다.
제일 좋은것은 정규표현식을 사용하시는건데, 여유치 않으시면 그냥 다음과 같이 써도 무방합니다.
int startIndex = sb.indexOf("<div class=\"sooyo_text\">");
int endIndex = sb.indexOf("</div>", startIndex);
CharSequence sub = sb.subSequence(startIndex + "<div class=\"sooyo_text\">".length(), endIndex);



