2012-09-28 5 views
3

나는 안드로이드 앱을 만들고 내 데이터 소스 인 xml 파일을 가지고 있는데, XPath를 사용하여 쿼리를 작성한 다음 결과를 ListView에로드하기 위해로드합니다. 문제는 xml 파일이 더 커지기 시작할 때 발생합니다 (최대 10MB). 그것은 내가 기억에 문제가있을 수 있다는 것을 의미합니다. xml을로드하고 파일을 검색 할 때 장치의 메모리를 손상시키지 않고 귀중한 시간 처리 데이터를 낭비하지 않고 최상의 방법을 알고 싶습니다.큰 XML 파일로드 및 쿼리 Android

InputStream isRaw = context.getResources().openRawResource(R.raw.xmlbooksource); 
_xmlBookSource = new InputSource(isRaw); 

그리고 여기에 내가 XPath를 사용하여 쿼리합니다 :

nodeResultSet = (NodeList) xpath.evaluate(xpathExpression, _xmlBookSource, XPathConstants.NODESET); 

모든 조언은 환영을 내가 xml 파일을로드 할 때 다음

이다.

+0

동일한 문제가있었습니다 (실제로 약 40 MiB의 XML에서 OutOfMemory 오류가 발생 함). 자신 만의 최적화 된 파서를 작성하는 것 외에는 해결할 방법이 없습니다. – m0skit0

+0

다른 접근 방식을 취해야하고 SAX 파서를 사용하고 있습니다. xml을 읽을 수 있지만, 내가 시도한 파일은 매우 작습니다. 그래서 더 큰 파일을 가지고 다른 테스트를 할 것입니다. – AlexSanchez

+0

SAX를 사용하고 있습니다. 약 40 MiB 이상에서는 작동하지 않습니다. 내가 한 것처럼 시간 낭비하고 싶지 않다면 안드로이드의 XML 파서는 아무도 작동하지 않습니다. – m0skit0

답변

1

데이터 원본으로 사용할 수 있으며 XPath를 사용하여 검색 할 수 있지만; XML은 실제로 이러한 목적으로 만들어지지는 않으며 시스템 간의 데이터 전송으로 제한되어야합니다.

데이터 소스가 매우 작 으면 SQLite와 같은 데이터베이스를 사용하여 데이터 저장 및 쿼리를 진지하게 고려해야합니다.

+0

XML 파일을 내 DS로 선택한 이유는 XML 파일이 SQlite로 변경하기 쉽기 때문입니다. SQlite에서는 구조에 묶여 있습니다. – AlexSanchez

+0

귀하의 충고는 저를 두 번 생각하고 제 설계로 돌아가도록했습니다. 하지만 지금은 새로운 문제가 생겨서, 당신이 무언가를 알고 있다면 환영받을 것입니다. 이것은 [링크] (http://stackoverflow.com/questions/14760507/receiving-and-sending-messages-over-the-network-from-a-background-process) – AlexSanchez