2013-01-11 2 views
0

프로젝트 작업 중이며 문제가 발생했습니다. html을 사용하여 html 구문 분석기를 사용하려고 시도하고 xpath를 사용하여 문자열을 반환합니다. 나는 그것이 어떤 오류를 발견하면 stacktrace를 돌려 주도록했다. 스택 트레이스를 기반으로 디버깅하는 방법을 알지 못합니다. 여기에 코드가 있습니다.HTMLcleaner 스택 추적 오류

package ru.habrahabr.stackparser; 

import java.net.URL; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

import org.htmlcleaner.TagNode; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.*; 

public class stackParser extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button button = (Button) findViewById(R.id.parse); 
    button.setOnClickListener(myListener); 
} 


private ProgressDialog pd; 

private OnClickListener myListener = new OnClickListener() { 
    public void onClick(View v) { 
     pd = ProgressDialog.show(stackParser.this, "Working...", 
       "request to server", true, false); 
     new parseSite() 
       .execute("http://wiki.teamliquid.net/starcraft2/3_Gate_Robo"); 
    } 
}; 

private class parseSite extends AsyncTask<String, Void, String> { 
    protected String doInBackground(String... arg) { 
     String output = new String(); 
     try { 
      htmlHelper hh = new htmlHelper(new URL(arg[0])); 
      output = hh.htmlHelper(arg[0]); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return output; 
    } 


    protected void onPostExecute(String output) { 
     pd.dismiss(); 
     TextView view = (TextView) findViewById(R.id.tv1); 
     view.setText(output); 

    } 
} 

여기 내 HTML 헬퍼 클래스

package ru.habrahabr.stackparser; 

import java.io.IOException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import org.htmlcleaner.CleanerProperties; 
import org.htmlcleaner.HtmlCleaner; 
import org.htmlcleaner.TagNode; 
import org.htmlcleaner.XPatherException; 

public class htmlHelper { 
TagNode rootNode; 

public htmlHelper(URL url) { 
    // TODO Auto-generated constructor stub 
} 

public String htmlHelper(String arg) throws IOException, XPatherException 
{ 
    CleanerProperties props = new CleanerProperties(); 

    // set some properties to non-default values 
    props.setTranslateSpecialEntities(true); 
    props.setTransResCharsToNCR(true); 
    props.setOmitComments(true); 

    HtmlCleaner cleaner = new HtmlCleaner(props); 
    rootNode = cleaner.clean(arg); 

    Object[] nodes = rootNode.evaluateXPath("//h1[@id='firstHeading']"); 

    String things = nodes.toString(); 

    return things; 
} 

UI를 로딩 바 작업 괜찮아요하지만 텍스트 뷰는 [Ljava.lang.Object를 반환 유지, 42455a88

정말 일부 감사하겠습니다 @ 이걸 도와 줘 ... 나는 하루 종일 씨름을 했어. 알아낼 수가 없어. 감사!

답변

0

나는 그것을 알아 냈어. Xpath 쿼리는 XML 문서의 DOM 트리를 참조했습니다. 따라서 throw를 피하기 위해 DOM 트리를 정리 한 후에 초기화해야합니다. 그러면 Xpath가 작동합니다.

0

시도 TagNode에서 텍스트를 읽는 같이

Object[] nodes = rootNode.evaluateXPath("//h1[@id='firstHeading']"); 
if(nodes == null || nodes.length < 1) { 
    return ""; 
} 

TagNode tagnode = (TagNode)nodes[0]; 
String things = tagnode.getText(); 
+0

위의 변경으로 버튼을 클릭하면 textView가 그냥 비어 있고 진행률 표시 줄이 사라집니다. – JP409