2010-08-07 2 views
0

풀 (parser) (org.xmlpull.v1.XmlPullParser)을 사용하여 큰 XML 문서를 구문 분석하고 있습니다. 특정 노드에 도달하면 그 노드와 모든 자식 노드를 텍스트 덩어리 (또는 자식 노드도 좋습니다)로 잡고 String으로 저장합니다. 이것을 달성하는 효율적인 방법은 무엇입니까? 무엇보다 (본질적으로) buffer.append('<').append(xpp.getName()).append('>')보다?Android XML - 풀 분석 중에 텍스트 덩어리를 저장합니다.

여기에 예를 들어

<root id="root"> 
    <node> 
     <grab-all-inside> 
      <!-- bunch of nodes, attributes etc. that needs to be saved as text --> 
     </grab-all-inside> 
    </node> 
    <node> 
     <grab-all-inside> 
      <!-- bunch of nodes, attributes etc. that needs to be saved as text --> 
     </grab-all-inside> 
    </node> 
    <node> 
     <grab-all-inside> 
      <!-- bunch of nodes, attributes etc. that needs to be saved as text --> 
     </grab-all-inside> 
    </node> 
</root> 

P.S.입니다 내가 다른 파서 나 테크닉을 사용하는 것이 나을 것이라고 생각한다면 나는 제안을 위해 열려있다. 보조 노트처럼 -이 텍스트 덩어리는 어떤 시점에서 추출되고 파싱된다는 전제와 함께 db에 대해 직렬화됩니다.

답변

1

append() 호출이 만족스러운 것으로 의심됩니다. 그것들은 끌어 당기는 파서 (parser)에서 각각의 개별 사건입니다.

XML 리소스 인 경우 문자열 리소스를 대신 사용해보십시오. 안드로이드 1.6+에서 가벼운 HTML 마크 업을 포함 할 수 있으며, 임의의 마크 업을 포함 할 수 있습니다. 단지 문자열로 취급됩니다. 시도하지 않았습니다. 또는 각 노드의 내용에 대한 원시 리소스를 만들고 전체 내용을 문자열로 읽습니다.

+0

나는 1.5를 지원해야한다 - 그것은 Flurry에 따라 나의 앱의 트래픽의 약 12 ​​%이다. 나는 XML로 피드를 얻는다. 파싱은 사소하지만 꽤 복잡하다. 제한된 수의 업데이트를 현금화하고 싶습니다. 테이블 묶음에 여러 개의 오브젝트를 저장하는 것과 같은 원숭이 대신 텍스트를 하나의 열에 저장 한 다음 동일한 루틴을 사용하여 다시 구문 분석하는 것이 더 좋습니다. 하지만 즉시 사용 가능할 때 XML 스 니펫을 부품에서 재사용해야한다고 생각하기에 나를 죽입니다. – Bostone

+0

넵 - 버퍼링을 사용하여 끝났습니다. Mark – Bostone