2010-04-05 6 views
1

Android에서 SAX 파서를 사용하여 매우 간단한 XML 스키마를 구문 분석합니다.SAX 구문 분석 중간 문서를 중단 하시겠습니까?

예제 파일은

<Lists> 
<List name="foo"> 
<Note title="note 1" .../> 
<Note title="note 2" .../> 
</List> 
<List name="bar"> 
<Note title="note 3" .../> 
</List> 
</Lists> 

가 ... 의문 중요하지 않은 속성과 더 노트 데이터를 나타내는 것입니다.

SAX 파서를 사용하여 문서를 구문 분석하고 Note 및 List 노드를 처리하기 위해 HandlerBase의 startElement 및 'endElement'메소드 만 구현합니다.

그러나 경우에 따라 파일이 매우 클 수 있으며 처리하는 데 약간의 시간이 걸릴 수 있습니다. 언제든지 구문 분석 프로세스를 중단 할 수 있습니다 (즉, 사용자가 취소 버튼을 누르면).

내가 함께 왔어요 가장 좋은 방법은 특정 조건 (즉 boolean stopParsing에 해당)이 충족 될 때 내의 startElement 방법에서 예외가 발생하는 것입니다.

더 좋은 방법이 있나요?

저는 항상 DOM 스타일 파서를 사용했기 때문에 SAX 파서를 완전히 이해하지 못했습니다.

마지막으로 한 가지 메모는 Android에서 실행 중이므로 UI를 응답 가능하게 유지하기 위해 작업자 스레드에서 파서를 실행하도록하겠습니다. 파서가 실행되는 동안 안전하게 스레드를 죽일 수있는 방법을 아는 경우 제 질문에 대한 답변도 제공됩니다.

답변

2

다음 방법을 호출하지 않고 쉽게 수행 할 수 있으므로 XMLPullParser을 조사하고 싶을 수 있습니다. 구문 분석을보다 잘 제어 할 수 있습니다.

XmlPullParser xpp=getResources().getXml(R.xml.lists); 
while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) { 
    if (xpp.getEventType()==XmlPullParser.START_TAG) { 
     if (xpp.getName().equals("list")) { 
      items.add(xpp.getAttributeValue(0)); 
     } 
    } 

    xpp.next(); 
} 
+0

지금 알아야 할 것은 작업자 스레드 내에서 작업을 중지하는 방법뿐입니다. – CodeFusionMobile

+0

Stax (javax.xml.stream)는 표준 pull 파서 API이므로 JDK 1.6에 포함되어 있거나 (외부에서 Woodstox를 사용할 수 있음) Stax를 사용하는 것이 좋습니다. – StaxMan

관련 문제